简单的一点,我只是想知道是否有一种干净而雄辩的方式从一个与给定键不匹配的关联数组中返回所有值?
$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;
}
这是我(将要)使用的,但是,是否有更清洁的实现,我可能在手册中遗漏了什么?
答案 0 :(得分:25)
您只需unset
值:
$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
编辑:更清晰。您可以通过将数组分配给另一个变量来复制数组。
或在函数中:
function arrayExclude($array, Array $excludeKeys){
foreach($excludeKeys as $key){
unset($array[$key]);
}
return $array;
}
答案 1 :(得分:17)
虽然这个问题太旧了,但这个问题有几个答案,但我发布了一个可能对某人有用的解决方案。
您可以从提供的输入中获取所有数组元素,除了您已定义要使用以下内容排除的某些键:
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
这将排除$input
数组中包含SomeKey1
,SomeKey2
和SomeKey3
的元素,并将所有其他元素返回$result
变量。
答案 2 :(得分:11)
使用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));
编辑:我添加了=> 0s。
答案 3 :(得分:2)
$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
$onlyBeta = $array;
unset($onlyBeta['alpha'], $onlyBeta['gamma']);
答案 4 :(得分:1)
在使用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;
}
这会稍快一些,如果您需要处理大型数据集,可能会有所帮助。
答案 5 :(得分:0)
答案 6 :(得分:0)
这里的简单函数,使用两个数组,实际数组和应该排除的键数组。如果我们排除这个功能,也可以很容易地做成一个单线。
function array_except(array $array,array $except) {
return array_filter($array,fn($key) => !in_array($key,$except),ARRAY_FILTER_USE_KEY);
}
答案 7 :(得分:-2)
array_diff_assoc可以提供帮助。所以即你可以使用
$onlyBeta = array_diff_assoc($array, array('alpha', 'gamma'))