Das Array sieht folgendermaßen aus:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
Und ich habe eine ganzzahlige Variable namens $v
.
Wie kann ich einen Array-Eintrag auswählen, der ein Objekt enthält, für das die ID
Eigenschaft den $v
Wert hat?
isset($item)
aber ich bevorzuge es, Variablen richtig zu initialisierenif($v == $struct["ID"]){...
YurkamTim ist richtig. Es bedarf nur einer Änderung:
Nach der Funktion ($) benötigen Sie einen Zeiger auf die externe Variable durch "use (& $ searchedValue)" und können dann auf die externe Variable zugreifen. Sie können es auch ändern.
quelle
&
ist beim Import$searchedValue
in den Schließungsbereich nicht erforderlich . Mit&
wird eine Referenz erstellt, die nur benötigt wird, wenn$searchedValue
sie innerhalb des Verschlusses geändert wurde.global
die einzige Möglichkeit wäre, Daten in Funktionen zu teilen! Aber es ist schade, wenn dies tatsächlich langsam ist. :(quelle
Ich habe hier eine elegantere Lösung gefunden . Angepasst an die Frage könnte es so aussehen:
quelle
array_filter
gibt jedoch ein Array zurück und stoppt nicht beim ersten gefundenen Wert.$searchedValue
innerhalb der Funktion nicht erkannt . Aber draußen ist es.$searchedValue
außerhalb des Schließungsbereichs liegt. Zweitens, wie funktionieren diese Array-Methoden Ihrer Meinung nach? Sie alle durchlaufen das Array intern$searchedValue
müssen, schreiben Siefunction ($e) use ($searchedValue) {
Wenn Sie array_column zum erneuten Indizieren verwenden, sparen Sie Zeit, wenn Sie mehrmals suchen müssen:
Dann können Sie einfach
$lookup[$id]
nach Belieben.quelle
Es so zu verwenden, wie Sie es wollten, wäre ungefähr so:
quelle
Versuchen
Arbeitsbeispiel hier
quelle
Wenn Sie einen kleinen Fehler im @YurkaTim beheben , funktioniert Ihre Lösung für mich, aber Sie fügen hinzu
use
:Zur Nutzung
$searchedValue
innerhalb der Funktion kann eine Lösung sein ,use ($searchedValue)
nachdem Funktionsparameterfunction ($e) HERE
.Die
array_filter
Funktion kehrt nur dann zurück,$neededObject
wenn die Bedingung für die Rückgabe lautettrue
Wenn
$searchedValue
ist eine Zeichenfolge oder eine Ganzzahl:Wenn
$searchedValue
ist Array, wo wir mit einer Liste überprüfen müssen:quelle
var_dump($neededObject);
:)Manchmal verwende ich gerne die Funktion array_reduce () , um die Suche durchzuführen. Es ähnelt array_filter (), wirkt sich jedoch nicht auf das gesuchte Array aus, sodass Sie mehrere Suchvorgänge für dasselbe Array von Objekten durchführen können.
quelle
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }
Ich habe das mit einer Art Java-Keymap gemacht. In diesem Fall müssen Sie Ihr Objektarray nicht jedes Mal durchlaufen.
Ausgabe:
quelle
Weg, um sofort den ersten Wert zu erhalten:
quelle
Ich habe hier veröffentlicht, was ich verwende, um genau dieses Problem mithilfe eines schnellen binären Suchalgorithmus effizient zu lösen: https://stackoverflow.com/a/52786742/1678210
Ich wollte nicht die gleiche Antwort kopieren. Jemand anderes hatte es etwas anders gefragt, aber die Antwort ist dieselbe.
quelle