哪个PHP函数可筛选关联数组仅保留键存在于另一数组值中的元素?
匹配关联数组键与索引数组值的PHP实现
需求:我需要类似array_intersect_key()的PHP处理逻辑,现有关联数组$populations和索引数组$countries,要返回$populations的子集,仅保留那些键存在于$countries数组的值中的元素。
示例输入数组:
$populations = [ 'Sweden' => 6476727, 'Denmark' => 3722898, 'Finland' => 3417691, 'Norway' => 3511912, 'Iceland' => 247524 ]; $countries = [ 'Sweden', 'Denmark', 'Norway' ];
期望输出:
[ 'Sweden' => 6476727, 'Denmark' => 3722898, 'Norway' => 3511912 ]
两种可行实现方式
方法一:使用
array_filter()
借助array_filter()的ARRAY_FILTER_USE_KEY参数,以数组键作为判断依据:$result = array_filter($populations, function($key) use ($countries) { return in_array($key, $countries); }, ARRAY_FILTER_USE_KEY);方法二:结合
array_flip()与array_intersect_key()(更高效)
先将索引数组$countries转为键值相同的关联数组,再用array_intersect_key()直接匹配键:$countryKeys = array_flip($countries); $result = array_intersect_key($populations, $countryKeys);这种方式效率更高,因为
array_intersect_key()底层依赖的array_key_exists查询速度远快于in_array()。
内容的提问来源于stack exchange,提问作者Electric-Gecko
相关产品推荐
相关产品推荐

