Ich denke, array_search ist viel besser lesbarer Code als die Verwendung der array_diff-Methode. Upvote
Kendepelchin
@zombat Ich frage mich, ob die Bestellung etwas mit den Ergebnissen zu tun hat. Es ist möglich, dass durch Mischen der gesuchte Wert entweder näher an der Vorderseite oder am Ende platziert wird.
Die leistungsstärkste Lösung wäre die Verwendung array_filter, mit der Sie Ihre eigene Filterfunktion definieren können.
Aber einige könnten sagen, dass es in Ihrer Situation ein bisschen übertrieben ist ...
Eine einfache foreachSchleife, um durch das Array zu gehen und das Element zu entfernen, das Sie nicht wollen, sollte ausreichen.
So etwas sollte in Ihrem Fall wahrscheinlich den Trick machen:
foreach($items as $key => $value){if($value == $id){
unset($items[$key]);// If you know you only have one line to remove, you can decomment the next line, to stop looping//break;}}
Ich habe gerade die Dokumentation gelesen und es wird empfohlen, array_keys () zu verwenden, um alle einem Wert zugeordneten Schlüssel zu finden.
Savageman
@ Savageman - Einverstanden. Ich habe einen schnellen Benchmark durchgeführt und array_keys()scheint besser abzuschneiden als array_search()bei dieser Aufgabe.
Zombat
6
Ihre Lösungen funktionieren nur, wenn Ihr Array eindeutige Werte enthält
Antworten:
Dies kann mit einem einfachen Einzeiler erreicht werden.
Mit diesem Array:
Du kannst tun:
Und der Wert von
$arr
wird sein:Hoffe, es hilft, schönen Code zu schreiben.
quelle
array_diff
Funktion ist zerstörungsfrei , es gibt ein neues Array.$referenced = array_diff($referenced, $items_to_remove);
Ich füge eine zweite Antwort hinzu. Ich habe ein schnelles Benchmarking-Skript geschrieben, um hier verschiedene Methoden auszuprobieren.
Die dritte Methode
array_keys()
mit dem angegebenen optionalen Suchparameter scheint bei weitem die beste Methode zu sein. Ausgabebeispiel:Demnach wäre die Lösung, die ich dann verwenden würde:
quelle
Wie wäre es mit:
oder für mehrere Werte:
Dies würde auch einen Schlüsselverlust verhindern, was ein Nebeneffekt von ist
array_flip()
.quelle
zu entfernen
$rm_val
von$arr
quelle
Die leistungsstärkste Lösung wäre die Verwendung
array_filter
, mit der Sie Ihre eigene Filterfunktion definieren können.Aber einige könnten sagen, dass es in Ihrer Situation ein bisschen übertrieben ist ...
Eine einfache
foreach
Schleife, um durch das Array zu gehen und das Element zu entfernen, das Sie nicht wollen, sollte ausreichen.So etwas sollte in Ihrem Fall wahrscheinlich den Trick machen:
quelle
Versuchen Sie array_search ()
quelle
array_keys()
scheint besser abzuschneiden alsarray_search()
bei dieser Aufgabe.Ihre Lösungen funktionieren nur, wenn Ihr Array eindeutige Werte enthält
Sehen:
Ein besserer Weg wäre, mit array_search in einer Schleife, falls erforderlich, nicht gesetzt zu werden.
quelle
ohne Flip:
quelle
quelle
Sie können die Funktion array_splice für diese Operation verwenden. Ref: array_splice
quelle