2009-11-17 9 views

risposta

8

che dipende:

$a1 = array('a' => 1, 'b' => 2, 'c' => 3); 
unset($a1['b']); 
// array('a' => 1, 'c' => 3) 

$a2 = array(1, 2, 3); 
unset($a2[1]); 
// array(0 => 1, 2 => 3) 
// note the missing index 1 

// solution 1 for numeric arrays 
$a3 = array(1, 2, 3); 
array_splice($a3, 1, 1); 
// array(0 => 1, 1 => 3) 
// index is now continous 

// solution 2 for numeric arrays 
$a4 = array(1, 2, 3); 
unset($a4[1]); 
$a4 = array_values($a4); 
// array(0 => 1, 1 => 3) 
// index is now continous 

Generalmente unset() è sicuro per hashtables (array di stringhe-indicizzato), ma se si deve fare affidamento sugli indici numerici continui dovrete utilizzare array_splice() o una combinazione di unset() e array_values().

+1

Perché dovresti usare unset combinato con array_values ​​piuttosto che array_splice? – John

+4

@John: Uno scenario a cui posso pensare è quando si desidera rimuovere più elementi da un array. Con 'unset()' -way puoi rimuovere i valori senza dover pensare a cambiare le chiavi - se hai finito esegui l'array attraverso 'array_values ​​()' per normalizzare l'indicizzazione. È più pulito e più veloce dell'uso di 'array_splice()' diverse volte. –

9

Il modo comune:

Secondo la manual

unset($arr[5]); // This removes the element from the array 

Il modo filtrato:

C'è anche la funzione array_filter() prendersi cura di matrici filtranti

$numeric_data = array_filter($data, "is_numeric"); 

Per ottenere un indice sequenziale è possibile utilizzare

$numeric_data = array_values($numeric_data); 

Riferimenti
PHP – Delete selected items from an array

+0

Peter, grazie. – lovespring

5

Dipende. Se si desidera rimuovere un elemento senza causare lacune negli indici, è necessario utilizzare array_splice:

$a = array('a','b','c', 'd'); 
array_splice($a, 2, 1); 
var_dump($a); 

uscita:

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "d" 
} 

Utilizzando impostata in grado di lavorare, ma questo si traduce in un indice non continuo. Questo a volte può essere un problema quando eseguire iterazioni su un array tramite conteggio ($ a) - 1 come misura del limite superiore:

$a = array('a','b','c', 'd'); 
unset($a[2]); 
var_dump($a); 

uscita:

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [3]=> 
    string(1) "d" 
} 

Come si vede, il conteggio è ora 3 ma l'indice dell'ultimo elemento è anche 3.

La mia raccomandazione è quindi di usare array_splice per gli array con indici numerici, e usare unset solo per gli array (dizionari davvero) con indici non numerici.

+0

in alternativa puoi chiamare 'unset ($ a [2]); $ a = array_values ​​($ a); ' – nickf

Problemi correlati