更好的方法来取消设置多个数组元素
这里的交易是我有一个包含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()不安全,所以完全没有问题!