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

这里的交易是我有一个包含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']); 

是的代码是丑陋的,没有必要bash。 我如何使这看起来更好?

它看起来像函数extract()将是一个更好的工具,你想要做什么(假设它是从数组中提取所有的键/值并将它们分配给与本地作用域中的键相同名称的variables)。 提取内容后,您可以取消设置整个$post ,假设它不包含任何您想要的内容。

但是,要真正回答你的问题,你可以创build一个你想要删除和循环的键的数组,明确地取消设置它们…

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

…或者你可以将variables指向一个新的数组,删除键

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

…或传递所有数组成员unset()

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

使用array_diff_key删除

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

你可以使用array_intersect_key,如果你想提供一个键数组来保持。

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

不是循环遍历整个数组,而是取消所有的键,你可以像这样解除它:

示例数组:

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

对于整个arrays:

 unset($array); 

对于独特的键:

 unset($array["key1"]); 

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

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

我希望这可以帮助你的发展。

我知道这个问题是旧的,但我认为一个最佳的方式可能是这样做的:

 $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()不安全,所以完全没有问题!