You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从给定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:36:14