如何从给定PHP多维数组中仅获取所有子数组的匹配值?
提取PHP多维数组中所有子数组的共同元素
嘿,要找出所有子数组都包含的匹配值,本质就是计算多个数组的交集。PHP里有现成的数组函数可以组合起来搞定这个需求,比手动写循环高效多了。
直接可用的实现代码
$dates_array = array(); $dates_array[] = array('2018-08-01','2018-09-02','2018-12-03'); $dates_array[] = array('2018-12-03','2018-09-02','2018-08-01'); $dates_array[] = array('2018-12-03','2018-08-01','2018-08-02'); $dates_array[] = array('2018-01-26','2018-08-01','2018-12-03'); // 计算所有子数组的交集 $common_values = array_reduce($dates_array, function($carry, $item) { if ($carry === null) { // 第一次循环,把第一个子数组作为初始对比基准 return $item; } // 后续每次和当前子数组取交集,只保留共同存在的元素 return array_intersect($carry, $item); }, null); // 输出结果 echo '<pre>'; print_r($common_values); echo '</pre>';
代码逻辑拆解
array_reduce会逐个遍历$dates_array里的子数组,通过回调函数逐步缩小范围:- 第一次迭代时,
$carry是初始值null,我们直接把第一个子数组当作初始的交集集合。 - 之后每一次迭代,用
array_intersect把当前的交集结果和下一个子数组做对比,只保留两者都存在的元素。
- 第一次迭代时,
- 针对你的示例数组,最终输出的共同元素是:
Array ( [0] => 2018-08-01 [2] => 2018-12-03 )
额外小提示
如果你的子数组里存在重复元素,而你希望结果里没有重复项,可以在最后加上$common_values = array_unique($common_values);去重。不过你的示例里每个子数组的元素都是唯一的,这一步可以按需选择。
内容的提问来源于stack exchange,提问作者The Bobster
相关产品推荐
相关产品推荐

