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

Дело здесь в том, что у меня есть массив с 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 () небезопасен, так что это совершенно не может быть и речи!