Дело здесь в том, что у меня есть массив с 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']);
Да, код уродливый, не нужно бить. Как мне лучше выглядеть?
Похоже, что функция extract()
будет лучшим инструментом для того, что вы пытаетесь сделать (предполагая, что она извлекает все ключи / значения из массива и назначает их переменным с теми же именами, что и ключи в локальной области). После того, как вы извлекли содержимое, вы могли бы отключить весь столбец $post
, считая, что он не содержит ничего, что вы хотели.
Однако, чтобы ответить на ваш вопрос, вы можете создать массив ключей, которые хотите удалить, и выполнить цикл, явно отключив их …
$removeKeys = array('name', 'email'); foreach($removeKeys as $key) { unset($arr[$key]); }
с$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']);
Используйте array_diff_key для удаления
$remove = ['telephone', 'country']; array_diff_key($post, array_flip($remove));
Вы можете использовать array_intersect_key, если хотите предоставить массив ключей для сохранения.
Существует другой способ, который лучше, чем приведенные выше примеры. Источник: 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 */ }
с$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 () небезопасен, так что это совершенно не может быть и речи!