更好地取消设置多个数组元素的方法

时间:2011-10-25 05:19:05

标签: php

这里的交易是我有一个包含17个元素的数组。我希望在一定时间内获得我需要的元素,并从阵列中永久删除它们。

以下是代码:

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

是的,代码很难看,不需要打击。如何让这个看起来更好?

5 个答案:

答案 0 :(得分:81)

看起来函数extract()对于你想要做的事情来说是一个更好的工具(假设它从数组中提取所有键/值并将它们分配给与键中名称相同的变量)当地范围)。在您提取内容后,您可以取消设置整个$post,假设它不包含您想要的任何内容。

然而,要真正回答你的问题,你可以创建一个你想要删除和循环的键数组,明确地取消它们......

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

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

...或者你可以将变量指向一个删除了键的新数组......

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

...或将所有数组成员传递给unset() ...

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

答案 1 :(得分:71)

使用array_diff_key删除

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

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

如果要提供要保留的密钥数组,可以使用array_intersect_key。

答案 2 :(得分:37)

还有另一种方法比上面的例子更好。 资料来源:http://php.net/manual/en/function.unset.php

不是循环遍历整个数组并取消设置所有键,您可以像这样取消设置:

示例数组:

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

对于整个阵列:

unset($array);

对于唯一键:

unset($array["key1"]);

对于一个数组中的多个键:

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

我希望这有助于您的发展。

答案 3 :(得分:1)

我理解这个问题已经过时了,但我认为最佳方法可能就是:

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

现在,你可以在任何地方使用$ name,$ email,...;

注意:extract()不安全,所以完全没问题!

答案 4 :(得分:1)

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



   
   $myArray = array_except($post, ['name', 'email','address','telephone','country']);
   
  print_r($myArray);
  
  
   
  function array_except($array, $keys){
    foreach($keys as $key){
        unset($array[$key]);
    }
    return $array;
  }
?>