Лучший способ отключить несколько элементов массива
Дело в том, что у меня есть массив с 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. Как мне лучше выглядеть?
Ответы
Ответ 1
Похоже, что функция 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']);
Ответ 2
Используйте array_diff_key для удаления
$remove = ['telephone', 'country'];
array_diff_key($post, array_flip($remove));
Вы можете использовать array_intersect_key, если вы хотите предоставить массив ключей для хранения.
Ответ 3
Есть другой способ, который лучше, чем приведенные выше примеры.
Источник: 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.
Надеюсь, это поможет вам в вашем развитии.
Ответ 4
Я понимаю, что этот вопрос старый, но я думаю, что оптимальным способом может быть это:
$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,... из любого места;)
NB: extract() небезопасен, поэтому он совершенно не в этом вопрос!