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

PHP如何过滤二维数组,保留包含指定值的子数组?

嘿,这个需求太常见了,给你几个靠谱的PHP实现方案,按需挑选就行:

方案1:array_filter() + in_array()(最直观常用)

这是大多数开发者会优先选的写法,逻辑清晰,代码简洁:

// 你的原始二维数组
$originalArray = [
    4 => [0, 1, 2, 3, 10],
    1 => [0, 1, 2, 3, 10],
    2 => [0, 1, 2, 3],
    3 => [0, 1, 2, 3]
];
$targetValue = 10; // 你要搜索的值

// 过滤数组
$filteredArray = array_filter($originalArray, function($subArray) use ($targetValue) {
    // 检查子数组是否包含目标值
    return in_array($targetValue, $subArray);
});

// 输出结果,会得到键为4和1的子数组
print_r($filteredArray);

小提示:如果需要严格类型匹配(比如区分10和"10"),给in_array()加第三个参数true就行:in_array($targetValue, $subArray, true)。

方案2:手动循环(适合新手理解底层逻辑)

如果刚接触PHP,手动写循环能让你更清楚整个过滤流程,没有黑魔法:

$filteredArray = [];
foreach ($originalArray as $key => $subArray) {
    // 判断当前子数组是否包含目标值
    if (in_array($targetValue, $subArray)) {
        // 符合条件就保留原键和子数组
        $filteredArray[$key] = $subArray;
    }
}

print_r($filteredArray);

这个写法没有依赖高阶函数,每一步都一目了然,调试起来也方便。

方案3:array_reduce()(适合需要额外处理的场景)

如果过滤后还需要对保留的子数组做修改、拼接等操作,array_reduce()会更灵活:

$filteredArray = array_reduce(array_keys($originalArray), function($result, $key) use ($originalArray, $targetValue) {
    $subArray = $originalArray[$key];
    if (in_array($targetValue, $subArray)) {
        // 这里可以加额外逻辑,比如修改子数组内容
        // $subArray[] = 'added after filter';
        $result[$key] = $subArray;
    }
    return $result;
}, []);

print_r($filteredArray);

这个方法本质是把原数组逐步“归约”成我们需要的结果,适合过滤+加工的组合需求。


内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:41