2011-10-25 22 views
49

L'accordo qui è che ho un array con 17 elementi. Voglio ottenere gli elementi di cui ho bisogno per un certo periodo di tempo e rimuoverli definitivamente dall'array.Un modo migliore per rimuovere più elementi di array

Ecco il codice:

$name = $post['name']; 
$email = $post['email']; 
$address = $post['address']; 
$telephone = $post['telephone']; 
$country = $post['country']; 

unset($post['name']); 
unset($post['email']); 
unset($post['address']); 
unset($post['telephone']); 
unset($post['country']); 

Sì il codice è brutto, non c'è bisogno di Bash. Come posso rendere questo aspetto migliore?

risposta

67

Sembra che la funzione extract() sia uno strumento migliore per ciò che si sta tentando di fare (presupponendo che estragga tutte le chiavi/valori da un array e li assegni a variabili con lo stesso nome delle chiavi nello scope locale)). Dopo aver estratto i contenuti, è possibile disinserire l'intero $post, assumendo che non contenga nient'altro che si desidera.

Tuttavia, per rispondere alla tua domanda in realtà, è possibile creare una serie di tasti che si desidera rimuovere e scorrere, disabilitarli esplicitamente ...

$removeKeys = array('name', 'email'); 

foreach($removeKeys as $key) { 
    unset($arr[$key]); 
} 

... oppure si potrebbe puntare la variabile in un array che ha le chiavi rimosse ...

$arr = array_diff_key($arr, array_flip($removeKeys)); 

... o passare tutti i membri di matrice a unset() ...

unset($arr['name'], $arr['email']); 
+4

[array_diff_key()] (http: // php.net/manual/en/function.array-diff-key.php) è una bella soluzione. Ho pensato di aggiungere che puoi usare [array_intersect_key()] (http://php.net/manual/en/function.array-intersect-key.php) per fare il contrario, mantenere solo determinati elementi – batfastad

+1

con cui sto bbradley - array_diff_key è un'ottima soluzione – Michael

2

capisco questa domanda è vecchia, ma penso che un modo ottimale potrebbe essere quella di fare questo:

$vars = array('name', 'email', 'address', 'phone'); /* needed variables */ 
foreach ($vars as $var) { 
    ${$var} = $_POST[$var]; /* create variable on-the-fly */ 
    unset($_POST[$var]); /* unset variable after use */ 
} 

Ora, è possibile utilizzare $ nome, $ e-mail, ... da nessuna parte;)

NB: extract() non è sicuro, quindi è completamente fuori questione!

32

C'è un altro modo che è meglio degli esempi precedenti. Fonte: http://php.net/manual/en/function.unset.php

Invece di looping approfondita l'intero array e disinserimento tutte le sue chiavi, si può semplicemente unset una volta in questo modo:

Esempio Array:

$array = array("key1", "key2", "key3"); 

Per l'intero array:

unset($array); 

Per chiavi univoche:

unset($array["key1"]); 

Per più chiavi in ​​un array:

unset($array["key1"], $array["key2"], $array["key3"] ....) and so on. 

Spero che questo ti aiuta nel vostro sviluppo.

40

Usa array_diff_key per rimuovere

$remove = ['telephone', 'country']; 

array_diff_key($post, array_flip($remove)); 

Si potrebbe usare array_intersect_key se si voleva fornire una serie di chiavi per mantenere.

+3

Non capisco perché questo metodo non è accettato come la risposta vincente dal momento che funziona davvero come un fascino !! –

+0

Brillante! Ben fatto. Mi piace invece di eseguire il loop sull'array e disattivare gli elementi. – lifo

+0

Soluzione intelligente !! – MAZux

Problemi correlati