这里的问题是我有一个包含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。我怎样才能让这个看起来更好?
使用array_diff_key
删除
$remove = ['telephone', 'country'];
$remaining = array_diff_key($post, array_flip($remove));
array_intersect_key
。看起来函数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']);
还有一种方法比上面的例子更好。来源: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.
我知道这个问题很老了,但我认为一个最佳的方法可能是这样做:
$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,…From anywhere;)
注:extract()是不安全的,所以它是完全没有问题的!
<?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;
}
?>
在php中unset函数可以接受多个参数
$test = ['test1' => 1, 'test2' => 4, 'test34' => 34];
unset($test['test1'], $test['test34']);
这是来自文档
的描述unset(mixed $var, mixed ...$vars): void