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

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

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

100945 次浏览

It looks like the function extract() would be a better tool for what you're trying to do (assuming it's extract all key/values from an array and assign them to variables with the same names as the keys in the local scope). After you've extracted the contents, you could then unset the entire $post, assuming it didn't contain anything else you wanted.

However, to actually answer your question, you could create an array of the keys you want to remove and loop through, explicitly unsetting them...

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


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

...or you could point the variable to a new array that has the keys removed...

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

...or pass all of the array members to unset()...

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

I understand this question is old, but I think an optimal way might be to do this:

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

Now, you can use $name, $email, ... from anywhere ;)

NB: extract() is not safe, so it's completely out of question!

There is another way which is better then the above examples. Source: http://php.net/manual/en/function.unset.php

Instead of looping thorough the entire array and unsetting all its keys, you can just unset it once like so:

Example Array:

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

For the entire array:

unset($array);

For unique keys:

unset($array["key1"]);

For multiple keys in one array:

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

I hope this helps you in your development.

Use array_diff_key to remove

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


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

You could use array_intersect_key if you wanted to supply an array of keys to keep.

<?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;
}
?>

In php unset function can take multiple arguments

$test = ['test1' => 1, 'test2' => 4, 'test34' => 34];


unset($test['test1'], $test['test34']);

Here is this description from documentation

unset(mixed $var, mixed ...$vars): void