
本文介绍在 laravel 环境下高效筛选多维数组中满足特定键值条件的子数组,重点使用 `illuminate\support\arr::where()` 方法,兼顾原生 php 实现方案,并附带注意事项与代码示例。
在 Laravel 开发中,常需从结构如下的多维数组中提取所有 'tree' => '0' 的子项:
$this->treeArray = [
['tree' => '0'],
['tree' => '2'],
['tree' => '0'],
];此时目标是获取所有 tree 值为字符串 '0' 的子数组,结果应为:
[
['tree' => '0'],
['tree' => '0'],
]✅ 推荐方案:Laravel 内置 Arr::where()
Laravel 提供了简洁、可读性强的集合式工具函数。只需引入 Illuminate\Support\Arr,调用 Arr::where() 即可完成筛选:
use Illuminate\Support\Arr;
$filtered = Arr::where($this->treeArray, function ($item) {
return $item['tree'] === '0'; // 注意:严格比较,避免 '0' == 0 导致误匹配
});该方法返回一个保持原始键名(索引)的新数组,结果为:
立即学习“PHP免费学习笔记(深入)”;
[
0 => ['tree' => '0'],
2 => ['tree' => '0'],
]若需重置为连续数字索引(如 [0, 1]),可追加 array_values():
$filtered = array_values(Arr::where($this->treeArray, fn($item) => $item['tree'] === '0')); // 输出:[ ['tree' => '0'], ['tree' => '0'] ]
⚙️ 原生 PHP 方案(兼容非 Laravel 项目)
若未使用 Laravel,可用 array_filter() 配合匿名函数实现等效逻辑:
$filtered = array_filter($this->treeArray, function ($item) {
return isset($item['tree']) && $item['tree'] === '0';
});
$filtered = array_values($filtered); // 可选:重置索引⚠️ 关键注意事项:
- 务必使用 === 进行严格比较,防止 '0' == 0 == false 引发意外过滤;
- 访问 $item['tree'] 前建议用 isset() 或 array_key_exists() 判断键是否存在,避免 Notice: Undefined index;
- array_filter() 默认保留原始键名,如需数字索引务必调用 array_values()。
✅ 总结
| 场景 | 推荐方法 | 优势 |
|---|---|---|
| Laravel 项目 | Arr::where() | 语义清晰、自动处理空值、链式友好 |
| 原生 PHP / 轻量环境 | array_filter() + isset() | 无框架依赖、兼容性广 |
无论选择哪种方式,核心逻辑一致:遍历外层数组 → 检查每个子数组中目标键的值 → 返回符合条件的子数组集合。合理选用工具,可显著提升代码健壮性与可维护性。











