2009-08-17 12 views
17

Esiste una funzione PHP per rimuovere determinati elementi dell'array da un array?Come rimuovere i valori da un array in PHP?

Es., Ho un array (A) con valori e un altro array (B) da cui è necessario rimuovere i valori.

Desideri rimuovere i valori nell'array A dall'array B?

+0

Non posso fare a meno di chiedermi la stessa cosa +1 sulla domanda – JasonDavis

risposta

31

Uso array_diff()

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

restituirà un array con tutti gli elementi da $arrayB che sono non in $arrayA.

Per fare ciò con gli array associativi utilizzare array_diff_assoc().

Per rimuovere un singolo uso valore:

unset($array[$key]); 

Ovviamente si può ciclo che per fare l'equivalente delle funzioni per gli array, ma non c'è nessun punto in questo.

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

print_r($result); 
5

Dipende da cosa intendi per "rimuovere".

È possibile utilizzare la funzione unset() per rimuovere le chiavi dall'array, ma ciò non verrà reindirizzato. Così, per esempio, se si dispone di:

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

e quindi chiamare

unset($a[2]); 

Vi ritroverete con qualcosa di simile

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

Se è necessario l'array da sequenziale indicizzato , puoi prendere la matrice non impostata e inserirla in array_values ​​(), che restituirà un nuovo array con chiavi indicizzate in sequenza.

Tornando allo scenario originale, come altri osservano, array_diff farà il lavoro per voi, ma si noti che non esegue un controllo indice. Se ti serve, usa invece array_diff_assoc.

1

Mi sono accos questo post cercando un modo per rimuovere un singolo valore da un array (che il titolo afferma). Ecco un modo dritto in avanti, assumendo il valore da rimuovere è nell'array:

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

Sebbene ciò gettare errori se l'elemento di rimuovere non fa parte della matrice.

Un'altra soluzione, ma non le prestazioni realmente ottimizzato saggio è:

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

In ogni caso, magari creando un allineamento con il singolo valore utilizzando array_diff come suggerito da tutti qui è più veloce e più efficiente.

1

Forse una soluzione semplice e più rapida è questa. Una semplice reiterazione che può eliminare (unset) più valori nella matrice.

// 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]); 
    } 
Problemi correlati