Возвращать все элементы массива, кроме заданного ключа
Простой, мне просто интересно, есть ли чистый и красноречивый способ вернуть все значения из ассоциативного массива, которые не соответствуют данному ключу?
$array = array('alpha' => 'apple', 'beta' => 'banana', 'gamma' => 'guava');
$alphaAndGamma = arrayExclude($array, array('alpha'));
$onlyBeta = arrayExclude($array, array('alpha', 'gamma'));
function arrayExclude($array, Array $excludeKeys){
foreach($array as $key => $value){
if(!in_array($key, $excludeKeys)){
$return[$key] = $value;
}
}
return $return;
}
Это то, что я (буду) использовать, однако, есть ли более чистые реализации, чего я, возможно, пропустил в руководстве?
Ответы
Ответ 1
Вы можете просто unset
значение:
$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
Изменить: улучшилось. Вы можете скопировать массив, присвоив его другой переменной.
или в функции:
function arrayExclude($array, Array $excludeKeys){
foreach($excludeKeys as $key){
unset($array[$key]);
}
return $array;
}
Ответ 2
Используйте array_diff_key()
:
$array = array('alpha' => 'apple', 'beta' => 'banana', 'gamma' => 'guava');
$alphaAndGamma = array_diff_key($array, array('alpha'=>0));
$onlyBeta = array_diff_key($array, array('alpha'=>0, 'gamma'=>0));
EDIT: Я добавил = > 0s.
Ответ 3
Хотя этот вопрос слишком стар, и есть несколько ответов на этот вопрос, но я отправляю решение, которое может быть полезно кому-то.
Вы можете получить все элементы массива из предоставленного ввода, кроме определенных ключей, которые вы определили, чтобы исключить использование:
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
Это исключает элементы из массива $input
с ключами SomeKey1
, SomeKey2
и SomeKey3
и возвращает все остальные в переменную $result
.
Ответ 4
$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
$onlyBeta = $array;
unset($onlyBeta['alpha'], $onlyBeta['gamma']);
Ответ 5
Было несколько дискуссий о скорости при использовании in_array. Из того, что я прочитал, включая этот комментарий 1, использование isset выполняется быстрее, чем in_array.
В этом случае ваш код будет выглядеть следующим образом:
function arrayExclude($array, array $excludeKeys){
$return = [];
foreach($array as $key => $value){
if(!isset($excludeKeys[$key])){
$return[$key] = $value;
}
}
return $return;
}
Это будет немного быстрее и может помочь в том случае, если вам нужно обработать большие наборы данных.
Ответ 6
Вы можете легко удалить элемент массива своим ключом, используя это.
unset($array['key']);
DEMO http://codepad.org/EA9vTwzR
Ответ 7
array_diff_assoc может помочь. Итак, вы можете использовать
$onlyBeta = array_diff_assoc($array, array('alpha', 'gamma'))