Ich benutze in_array()
, um zu überprüfen, ob ein Wert in einem Array wie unten existiert,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
Aber was ist mit einem mehrdimensionalen Array (unten) - wie kann ich diesen Wert überprüfen, ob er im Multi-Array vorhanden ist?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
oder sollte ich nicht verwenden, in_array()
wenn es um das mehrdimensionale Array geht?
php
arrays
multidimensional-array
Laukok
quelle
quelle
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0);
$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux"));
$tmp
ein Array mitis_array()
Funktion ist. Wenn kein Array - fahren Sie mit einem anderen Szenario fort.Antworten:
in_array()
funktioniert nicht bei mehrdimensionalen Arrays. Sie könnten eine rekursive Funktion schreiben, um dies für Sie zu tun:Verwendung:
quelle
_r
analog zuprint_r()
). Es steigt in alle verschachtelten Arrays ab, um nach dem Wert zu suchen, bis keine Arrays mehr gefunden werden. Auf diese Weise können Sie Arrays beliebiger Komplexität durchsuchen, anstatt nur zwei Ebenen tief.Wenn Sie wissen, nach welcher Spalte gesucht werden soll, können Sie array_search () und array_column () verwenden:
Diese Idee befindet sich im Kommentarbereich für array_search () im PHP-Handbuch.
quelle
array_column
Das wird auch funktionieren.
Verwendung:
quelle
foreach
Schleife ist.$array
mit einem passenden assoziativen Schlüssel hat$item
. Ganz zu schweigen von der Möglichkeit, einen Teil einer Zeichenfolge unbeabsichtigt abzugleichen, wenn die Zeichenfolge selbst ein doppeltes Anführungszeichen enthält. Ich würde dieser Funktion nur in kleinen / einfachen Situationen wie dieser Frage vertrauen.$item
Zeichen enthalten sind, die den ersten Parameter (regulärer Ausdruck) vonpreg_match
Dies wird es tun:
in_array
arbeitet nur mit einem eindimensionalen Array, daher müssen Sie jedes Sub-Array durchlaufen undin_array
auf jedem ausführen .Wie andere angemerkt haben, gilt dies nur für ein zweidimensionales Array. Wenn Sie mehr verschachtelte Arrays haben, ist eine rekursive Version besser. Beispiele hierfür finden Sie in den anderen Antworten.
quelle
)
Ende der genannten Zeile fehlt ein .in_array()
mit dem dritten Parametersatz aufrufentrue
. Überprüfen Sie hier, warum: stackoverflow.com/questions/37080581/…wenn dein Array so ist
Benutze das
Beispiel:
echo in_multiarray("22", $array,"Age");
quelle
quelle
array_column()
Tolle Funktion, aber es hat bei mir nicht funktioniert, bis ich die
if($found) { break; }
zum hinzugefügt habeelseif
quelle
Für mehrdimensionale Kinder:
in_array('needle', array_column($arr, 'key'))
Für eindimensionale Kinder:
in_array('needle', call_user_func_array('array_merge', $arr))
quelle
array_column()
Methodecall_user_func_array('array_merge')
funktioniert die Methode auch mit indexbasiertenSie können Ihr mehrdimensionales Array jederzeit serialisieren und Folgendes ausführen
strpos
:Verschiedene Dokumente für Dinge, die ich verwendet habe:
quelle
Seit PHP 5.6 gibt es eine bessere und sauberere Lösung für die ursprüngliche Antwort:
Mit einem mehrdimensionalen Array wie diesem:
Wir können den Splat-Operator verwenden :
Wenn Sie Zeichenfolgenschlüssel wie diesen haben:
Sie müssen verwenden
array_values
, um den Fehler zu vermeidenCannot unpack array with string keys
:quelle
Die akzeptierte Lösung (zum Zeitpunkt des Schreibens) von jwueller
Ist vollkommen korrekt, kann sich aber bei einem schwachen Vergleich (dem Parameter
$strict = false
) unbeabsichtigt verhalten .Aufgrund des PHP-Typ-Jonglierens beim Vergleichen von Werten unterschiedlichen Typs
und
Wertet aus,
true
weil"example"
in umgewandeltint
und umgewandelt wird0
.(Siehe Warum betrachtet PHP 0 als gleich einer Zeichenfolge? )
Wenn dies nicht das gewünschte Verhalten ist , kann es zweckmäßig sein, numerische Werte in Zeichenfolgen umzuwandeln , bevor ein nicht strenger Vergleich durchgeführt wird:
quelle
Dies ist die erste Funktion dieses Typs, die ich im PHP-Handbuch für in_array gefunden habe . Funktionen in den Kommentaren sind nicht immer die besten, aber wenn sie nicht ausreichen, können Sie auch dort nachsehen :)
quelle
Hier ist mein Vorschlag basierend auf der Lösung json_encode () mit:
Wenn das Wort nicht gefunden wird, wird immer noch 0 gleich false zurückgegeben .
Ich hoffe es hilft.
quelle
00
into10000
oderlo
intoHello
. Darüber hinaus schlägt fehl, wenn die Nadel alle Zeichen enthält, diejson_encode
entkommen , wie doppelte Anführungszeichen.Ich glaube, Sie können heutzutage nur array_key_exists verwenden :
quelle
Ich suchte nach einer Funktion, mit der ich sowohl nach Strings als auch nach Arrays (als Nadel) im Array (Heuhaufen) suchen konnte , also fügte ich der Antwort von @jwueller hinzu .
Hier ist mein Code:
quelle
Es funktioniert auch, zuerst ein neues eindimensionales Array aus dem ursprünglichen zu erstellen.
quelle
Kürzere Version für mehrdimensionale Arrays, die basierend auf Datenbank-Ergebnismengen erstellt wurden.
Wird zurückgegeben, wenn das Array $ os_list 'XP' im Feld os_version enthält.
quelle
Ich habe eine wirklich kleine einfache Lösung gefunden:
Wenn Ihr Array ist:
dann lautet der Code wie folgt:
quelle
Ich habe diese Methode verwendet, funktioniert für eine beliebige Anzahl von verschachtelten und erfordert kein Hacken
quelle
Bitte versuche:
Ich bin mir nicht sicher über die Notwendigkeit, aber dies könnte für Ihre Anforderung funktionieren
quelle
$b
Die Array-Schlüssel sind nur Ganzzahlen ... in diesen Arrays sind keine Schlüssel angegeben ... und esarray_keys($b["irix"])
wird nur ein Fehler ausgegeben, da dieser$b["irix"]
nicht vorhanden ist.Was ist mit array_search? scheint es laut https://gist.github.com/Ocramius/1290076 ziemlich schneller als foreach zu sein .
quelle
Sie können so verwenden
http://php.net/manual/tr/function.array-intersect.php
quelle