2009-08-17 18 views
17

Czy istnieje funkcja PHP do usuwania pewnych elementów tablicy z tablicy?Jak usunąć wartości z tablicy w PHP?

Np. Mam tablicę (A) z wartościami i inną tablicą (B), z której należy usunąć wartości.

Chcesz usunąć wartości z tablicy A z tablicy B?

+0

Nie mogę pomóc, ale zastanawiałem się nad tym samym +1 na pytanie – JasonDavis

Odpowiedz

31

Zastosowanie array_diff()

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

powróci tablicę wszystkich elementów, które są od $arrayBnie w $arrayA.

Aby to zrobić z tablicami asocjacyjnymi, należy użyć array_diff_assoc().

Aby usunąć pojedynczy korzystanie wartość:

unset($array[$key]); 

Można pętli oczywiście, że aby zrobić odpowiednik funkcji tablicy, ale nie ma sensu w tym.

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

print_r($result); 
5

To zależy od tego, co masz na myśli przez "usuń".

Możesz użyć funkcji unset() do usunięcia kluczy z tablicy, ale to nie spowoduje ponownego jej indeksu. Tak na przykład, jeśli masz:

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

a następnie zadzwonić

unset($a[2]); 

Skończysz z czymś jak

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

Jeśli potrzebujesz tablicę być kolejno indeksowane , możesz wziąć niezatwierdzoną tablicę i wprowadzić ją do array_values ​​(), która zwróci nową tablicę z sekwencyjnie indeksowanymi kluczami.

Powracając do oryginalnego scenariusza, jak zauważają inni, array_diff wykona zadanie za Ciebie, ale zauważ, że nie sprawdza indeksu. Jeśli potrzebujesz tego, użyj zamiast tego array_diff_assoc.

1

Przyszedłem do tego posta, szukając sposobu na usunięcie jednej wartości z tablicy (co oznacza tytuł). Oto prosty sposób do przodu, przy założeniu, że wartość do usunięcia jest w tablicy:

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

Choć rzuci błędy jeśli element do usunięcia nie jest częścią tablicy.

Innym rozwiązaniem, ale naprawdę nie jest zoptymalizowana wydajność mądry:

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

Zresztą być może tworząc tablicę z jednej wartości jako array_diff jak sugeruje wszyscy tutaj jest szybsze i bardziej efektywne.

1

Być może jest to proste i szybsze rozwiązanie. Prosta powtórzenie, które może usunąć (usunąć) wiele wartości z tablicy.

// 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]); 
    } 
Powiązane problemy