1169 Stimmen

PHP Array löschen nach Wert (nicht Schlüssel)

Ich habe ein PHP-Array wie folgt:

$messages = [312, 401, 1599, 3, ...];

Ich möchte das Element löschen, das den Wert $del_val (zum Beispiel, $del_val=401 ), aber ich kenne den Schlüssel nicht. Das könnte helfen: jeder Wert kann nur einmal vorhanden sein .

Ich bin auf der Suche nach der einfachsten Funktion, um diese Aufgabe zu erfüllen, bitte.

1 Stimmen

@Adam Strudwick Aber wenn Sie viele Löschungen in diesem Array haben, wäre es dann besser, es einmal zu iterieren und den Schlüssel mit dem Wert gleichzusetzen?

1 Stimmen

0 Stimmen

2009voto

Bojangles Punkte 95745

使用する array_search() y unset versuchen Sie Folgendes:

if (($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
}

array_search() gibt den Schlüssel des gefundenen Elements zurück, der verwendet werden kann, um dieses Element aus dem ursprünglichen Array zu entfernen, indem unset() . Es wird zurückgegeben FALSE im Fehlerfall, kann aber im Erfolgsfall einen false-y-Wert zurückgeben (Ihr Schlüssel kann sein 0 zum Beispiel), weshalb der strenge Vergleich !== Operator verwendet wird.

En if() Anweisung wird geprüft, ob array_search() einen Wert zurück und führt nur dann eine Aktion aus, wenn dies der Fall ist.

943voto

Rok Kralj Punkte 43551

Nun, das Löschen eines Elements aus einem Array ist im Grunde genommen nur das Setzen Unterschied mit einem Element.

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

Es lässt sich gut verallgemeinern, man kann beliebig viele Elemente gleichzeitig entfernen, wenn man will.

Haftungsausschluss: Beachten Sie, dass meine Lösung eine neue Kopie des Arrays erzeugt, während die alte intakt bleibt, im Gegensatz zu der akzeptierten Antwort, die mutiert. Wählen Sie die Lösung, die Sie brauchen.

180voto

Ja͢ck Punkte 165747

Eine interessante Möglichkeit ist die Verwendung von array_keys() :

foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

En array_keys() Funktion zwei zusätzliche Parameter, um nur Schlüssel für einen bestimmten Wert zurückzugeben und ob eine strenge Prüfung erforderlich ist (d. h. Verwendung von === für den Vergleich).

Dies kann auch mehrere Array-Elemente mit demselben Wert entfernen (z. B. [1, 2, 3, 3, 4] ).

77voto

adlawson Punkte 6145

Wenn Sie mit Sicherheit wissen, dass Ihr Array nur ein Element mit diesem Wert enthalten wird, können Sie

$key = array_search($del_val, $array);
if (false !== $key) {
    unset($array[$key]);
}

Wenn Ihr Wert jedoch mehr als einmal in Ihrem Array vorkommt, können Sie wie folgt vorgehen

$array = array_filter($array, function($e) use ($del_val) {
    return ($e !== $del_val);
});

Anmerkung: Die zweite Option funktioniert nur für PHP5.3+ mit Schließungen

50voto

Rmannn Punkte 1305
$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X