Ich habe ein Array, in dem ich suchen möchte uid
und den Schlüssel des Arrays erhalten .
Beispiele
Angenommen, wir haben das folgende zweidimensionale Array:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
Der Funktionsaufruf search_by_uid(100)
(UID des ersten Benutzers) sollte zurückkehren 0
.
Der Funktionsaufruf search_by_uid(40489)
sollte zurückkehren 2
.
Ich habe versucht, Schleifen zu erstellen, möchte aber einen Code, der schneller ausgeführt wird.
php
arrays
multidimensional-array
Rachit
quelle
quelle
array_column
Einzeiler-Antworten verglichen . Ich habe sie alle geändert, um das tatsächlich erkannte Array zurückzugeben, nicht nur den Schlüssel, da dies normalerweise mein Anwendungsfall ist. Die Funktionsmethode erzielte für jede Methode eine durchschnittliche Mikroverzögerung von 0,361, Suchspalte 0,184 und Schlüsselspalte 0,189 über 1000 Läufe.Antworten:
Das wird funktionieren. Sie sollten es so nennen:
Es ist wichtig zu wissen, dass, wenn Sie vom
===
Operator verglichene Typen verwenden, diese exakt gleich sein müssen. In diesem Beispiel müssen Sie suchenstring
oder==
stattdessen nur verwenden===
.Basierend auf Angoru Antwort. In späteren Versionen von PHP (
>= 5.5.0
) können Sie Einzeiler verwenden.Hier ist die Dokumentation: http://php.net/manual/en/function.array-column.php .
quelle
array_column($userdb, 'uid')
mitarray_map(function($v){return $v['uid'];},$userdb)
array_search
es nicht?foreach
Schleife) wird schneller ausgeführt, da sie stoppt, sobald eine Übereinstimmung gefunden wird. Die neuere Lösung muss das gesamte Array einmalarray_column
durchlaufen, um es zu extrahieren , und es dann ein zweites Mal durchlaufen, um die Suche durchzuführen (bis eine Übereinstimmung gefunden wird). Die neuere Lösung ist leichter zu lesen, prägnanter, aber das OP hat speziell die Leistung als ProblemWenn Sie (PHP 5> = 5.5.0) verwenden, müssen Sie dazu keine eigene Funktion schreiben. Schreiben Sie einfach diese Zeile und fertig.
Wenn Sie nur ein Ergebnis wünschen:
Für mehrere Ergebnisse
Falls Sie ein assoziatives Array haben, wie in den Kommentaren angegeben, können Sie es mit folgenden Elementen erstellen:
Wenn Sie PHP <5.5.0 verwenden, können Sie diesen Backport verwenden , danke ramsey!
Update: Ich habe einige einfache Benchmarks erstellt und das Formular mit mehreren Ergebnissen scheint das schnellste zu sein, sogar schneller als die benutzerdefinierte Funktion von Jakub!
quelle
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
In späteren Versionen von PHP (> = 5.5.0) können Sie diesen Einzeiler verwenden:
quelle
Aufbauend auf Jakubs hervorragender Antwort finden Sie hier eine allgemeinere Suche, mit der der Schlüssel angegeben werden kann (nicht nur für uid):
Verwendungszweck:
$results = searcharray('searchvalue', searchkey, $array);
quelle
Ich weiß, dass dies bereits beantwortet wurde, aber ich habe dies verwendet und es in meinem Code ein wenig erweitert, sodass Sie nicht nur nach der UID suchen mussten. Ich möchte es nur für alle anderen freigeben, die diese Funktionalität benötigen.
Hier ist mein Beispiel und bitte denken Sie daran, dass dies meine erste Antwort ist. Ich habe das Parameter-Array herausgenommen, weil ich nur ein bestimmtes Array durchsuchen musste, aber Sie konnten es leicht hinzufügen. Ich wollte im Wesentlichen nach mehr als nur der UID suchen.
In meiner Situation müssen möglicherweise mehrere Schlüssel zurückgegeben werden, wenn nach anderen Feldern gesucht wird, die möglicherweise nicht eindeutig sind.
Später schrieb ich dies, um nach einem anderen Wert und einem anderen assoziativen Schlüssel suchen zu können. In meinem ersten Beispiel können Sie also nach einem Wert in einem bestimmten assoziativen Schlüssel suchen und alle Übereinstimmungen zurückgeben.
Dieses zweite Beispiel zeigt Ihnen, wo ein Wert ('Taylor') in einem bestimmten assoziativen Schlüssel (Vorname) UND ein anderer Wert (true) in einem anderen assoziativen Schlüssel (verwendet) gefunden wird, und gibt alle Übereinstimmungen zurück (Schlüssel, bei denen Personen mit Vornamen 'Taylor' UND sind angestellt).
Funktionsnutzung
Ergebnis
quelle
Looks array_filter ist dafür eine geeignete Lösung ...
PHP-Code
quelle
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
Ich habe eines der folgenden Beispiele für die Beschreibungsfunktion array_search geändert . Die Funktion gibt
searchItemsByKey
alle Werte mit dem Schlüssel $ aus einem mehrdimensionalen Array (N Ebenen) zurück. Vielleicht wäre es für jemanden nützlich. Beispiel:Funktionscode:
quelle
Hier ist ein Liner für das gleiche,
quelle
Obwohl dies eine alte Frage ist und eine akzeptierte Antwort hat, dachte ich, ich würde eine Änderung der akzeptierten Antwort vorschlagen. Zunächst einmal stimme ich zu, dass die akzeptierte Antwort hier korrekt ist.
Ersetzen Sie stattdessen die voreingestellte 'uid' durch einen Parameter in der Funktion. Wenn Sie jetzt den folgenden Code aufrufen, können Sie die eine Funktion für mehrere Array-Typen verwenden. Kleine Veränderung, aber eine, die den kleinen Unterschied macht.
PHP Fiddle Beispiel
quelle
null
und vergleichen es dann im Code mitfalse
.Ich möchte überprüfen, ob im folgenden Array
$arr
'abc' in Sub-Arrays vorhanden ist oder nichtDann kann ich das benutzen
Ich denke, dies ist der einfachste Weg zu definieren
quelle
Ich musste eine un-Funktion verwenden, die alle Elemente in einem Array findet. Also habe ich die Funktion von Jakub Truneček wie folgt geändert:
quelle
quelle
Sie können diese Funktion verwenden; https://github.com/serhatozles/ArrayAdvancedSearch
quelle
quelle
Versuche dies
quelle
Einfach teilen, vielleicht kann das gefallen.
quelle
Versuchen Sie dies auch
quelle
Mit Hilfe des obigen Codes kann man alle (teilweise übereinstimmenden) Daten aus jeder Spalte im 2D-Array finden, so dass die Benutzer-ID nach Bedarf gefunden werden kann.
quelle
Wenn Sie die erstellte Funktion @mayhem erweitern, handelt es sich bei diesem Beispiel eher um eine "unscharfe" Suche, falls Sie nur einen Teil (die meisten ) einer Suchzeichenfolge abgleichen möchten :
Der Wert im Array lautet beispielsweise Willkommen in New York! und Sie wollten die erste Instanz von nur "New York!"
quelle
quelle
Wenn Frage dh
Ans:
quelle
meine Lösung:
quelle