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

Tur*_*tel 72 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']);
Run Code Online (Sandbox Code Playgroud)

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

ale*_*lex 85

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

但是,要真正回答您的问题,您可以创建一个要删除和循环的键的数组,显式取消它们...

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

foreach($removeKeys as $key) {
   unset($arr[$key]);
}
Run Code Online (Sandbox Code Playgroud)

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

$arr = array_diff_key($arr, array_flip($removeKeys));
Run Code Online (Sandbox Code Playgroud)

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

unset($arr['name'],  $arr['email']);
Run Code Online (Sandbox Code Playgroud)

  • [array_diff_key()](http://php.net/manual/en/function.array-diff-key.php)是个不错的解决方案.以为我会补充说你可以使用[array_intersect_key()](http://php.net/manual/en/function.array-intersect-key.php)来反过来,只保留某些元素 (6认同)

Tim*_*Tim 83

使用array_diff_key删除

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

array_diff_key($post, array_flip($remove));
Run Code Online (Sandbox Code Playgroud)

如果要提供要保留的键数组,可以使用array_intersect_key.

  • 不明白为什么这种方法不被接受作为获胜的答案,因为它实际上作为一个魅力! (4认同)

小智 41

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

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

示例数组:

$array = array("key1", "key2", "key3");
Run Code Online (Sandbox Code Playgroud)

对于整个阵列:

unset($array);
Run Code Online (Sandbox Code Playgroud)

对于唯一键:

unset($array["key1"]);
Run Code Online (Sandbox Code Playgroud)

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

unset($array["key1"], $array["key2"], $array["key3"] ....) and so on.
Run Code Online (Sandbox Code Playgroud)

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