Лучший способ отключить несколько элементов массива - программирование
Подтвердить что ты не робот

Лучший способ отключить несколько элементов массива

Дело в том, что у меня есть массив с 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. Как мне лучше выглядеть?

4b9b3361

Ответ 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() небезопасен, поэтому он совершенно не в этом вопрос!