Better way to unset multiple array elements
The deal here is that I have an array with 17 elements. I want to get the elements I need for a certain time and remove them permanently from the array.
Here's the code:
$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']);
Yes the code is ugly, no need to bash. How do I make this look better?
Use array_diff_key
to remove
$remove = ['telephone', 'country'];
array_diff_key($post, array_flip($remove));
You could use array_intersect_key
if you wanted to supply an array of keys to keep.
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']);
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.