2009-08-17 15 views
17

Gibt es eine PHP-Funktion, um bestimmte Array-Elemente aus einem Array zu entfernen? Beispielsweise habe ich ein Array (A) mit Werten und ein weiteres Array (B), aus dem Werte entfernt werden müssen.Wie entfernt man Werte aus einem Array in PHP?

Möchten Sie die Werte im Array A vom Array B entfernen?

+0

Ich kann nicht helfen, aber ich habe die gleiche Sache +1 auf die Frage gefragt – JasonDavis

Antwort

31

Verwenden array_diff()

$new_array = array_diff($arrayB, $arrayA); 

wird ein Array mit allen Elementen von $arrayB zurückzugeben, die nicht in $arrayA sind.

Um dies mit assoziativen Arrays zu tun, verwenden Sie array_diff_assoc().

Um einen einzelnen Wert Verwendung zu entfernen:

unset($array[$key]); 

Sie können natürlich Schleife, die das Äquivalent der Array-Funktionen zu tun, aber es hat keinen Sinn darin.

1
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

print_r($result); 
5

Es hängt davon ab, was Sie mit "entfernen" meinen.

Sie können die Funktion unset() verwenden, um Schlüssel aus Ihrem Array zu entfernen. Dies wird jedoch nicht neu indiziert. So zum Beispiel, wenn Sie:

$a = array(1 => 'one', 2 => 'two', 3 => 'three'); 

und Sie rufen dann

unset($a[2]); 

Sie am Ende mit etwas werden wie

(1 => 'one', 3 => 'three'); 

Wenn Sie das Array müssen sequentiell indiziert werden Sie können das nicht gesetzte Array verwenden und es in array_values ​​() einspeisen, wodurch ein neues Array mit sequenziell indizierten Schlüsseln zurückgegeben wird.

Zurück zu Ihrem ursprünglichen Szenario, wie andere beobachten, array_diff wird die Arbeit für Sie erledigen, aber beachten Sie, dass es keine Indexprüfung durchführt. Wenn Sie das brauchen, verwenden Sie stattdessen array_diff_assoc.

1

Ich kam accros diesem Beitrag auf der Suche nach einem Weg, um einen einzelnen Wert aus einem Array zu entfernen (was der Titel angibt). Hier ist ein straight forward Weg, den Wert unter der Annahme, in dem Array zu entfernen:

$list = array('foo', 'bar', 'yay', '\o/'); 
$toremove = 'foo'; 
unset($list[array_search($toremove, $list)]); 

Obwohl diese Fehler werfen, wenn das Element zu entfernen ist nicht Teil des Arrays.

Eine andere Lösung, aber nicht wirklich optimierte Leistung klug ist:

$list = array('foo', 'bar', 'yay', '\o/'); 
$toremove = 'foo'; 
$list = array_flip($list); 
unset($list[$toremove]); 
$list = array_flip($list); 

Wie auch immer, vielleicht ein Array mit dem einzelnen Wert zu schaffen als mit array_diff wie hier von jedermann vorgeschlagen ist schneller und effizienter zu gestalten.

1

Vielleicht ist dies eine einfache und schnellere Lösung. Eine einfache Wiederholung, die mehrere Werte im Array löschen (aufheben) kann.

// Your array 
    $list = array("apple", "orange", "strawberry", "lemon", "banana"); 

    // Initilize what to delete 
    $delete_val = array("orange", "lemon", "banana"); 

    // Search for the array key and unset 
    foreach($delete_val as $key){ 
     $keyToDelete = array_search($key, $list); 
     unset($list[$keyToDelete]); 
    } 
Verwandte Themen