Melhor maneira de desmarcar vários elementos da matriz

O acordo aqui é que eu tenho uma matriz com 17 elementos. Eu quero obter os elementos que eu preciso por um certo tempo e removê-los permanentemente da matriz.

Aqui está o código:

$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']); 

Sim, o código é feio, não há necessidade de bater. Como faço para que isso melhore?

Parece que o extract() function extract() seria uma ferramenta melhor para o que você está tentando fazer (assumindo que é extrair todas as chaves / valores de uma matriz e atribuí-las a variables ​​com os mesmos nomes que as chaves no escopo local). Depois de extrair o conteúdo, você pode destrancar a $post inteira, assumindo que não contém mais nada que você quisesse.

No entanto, para realmente responder a sua pergunta, você poderia criar uma matriz das chaves que deseja remover e percorrer, desvinculando-as explicitamente …

 $removeKeys = array('name', 'email'); foreach($removeKeys as $key) { unset($arr[$key]); } 

… ou você pode apontar a variável para uma nova matriz que tenha as chaves removidas …

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

… ou passar todos os membros da matriz para unset()

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

Use array_diff_key para remover

 $remove = ['telephone', 'country']; array_diff_key($post, array_flip($remove)); 

Você poderia usar array_intersect_key se você quisesse fornecer uma série de chaves para manter.

Há outra maneira que é melhor do que os exemplos acima. Fonte: http://php.net/manual/en/function.unset.php

Em vez de fazer um loop completo em toda a matriz e desarmar todas as suas chaves, você pode simplesmente desatualizar uma vez, então:

Exemplo de matriz:

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

Para toda a matriz:

 unset($array); 

Para chaves exclusivas:

 unset($array["key1"]); 

Para várias chaves em uma matriz:

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

Espero que isso ajude você no seu desenvolvimento.

Eu entendo que esta questão é antiga, mas acho que uma maneira ótima pode ser fazer isso:

 $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 */ } 

Agora, você pode usar $ name, $ email, … de qualquer lugar;)

NB: extrair () não é seguro, por isso está completamente fora de questão!