我有一个看起来像下面这样的数组,我从API接收它,因此无法更改它:
[
[
'id' => '123',
'title' => 'Test',
'categories' => [
[
'id' => 1
]
]
],
[
'id' => '456',
'title' => 'Test',
'categories' => [
[
'id' => 2
]
]
]
]
我只想得到包含'categories' => [ 'id' => 1 ]
的完整数组
我试过这样的方法:
$filteredArray = array_filter($array, function ($value) {
return ($value['categories'] === 1);
});
这将导致一个空数组。我如何实现这一点?
3条答案
按热度按时间inb24sb21#
这就可以了。你需要确保你一直走到最深的层次进行过滤。
不是最干净的解决方案(可能有更好的解决方案),但它有效:
Here is the sandbox for testing
osh3o9ms2#
我已经修复了这个问题。类型是错误的。数组中的类别id是int类型,我使用
===
将其与字符串值进行比较。将其中一个转换为另一个的类型已经修复了这个问题。9o685dep3#
虽然示例数据中每个子集只包含一个
id
元素的条目,但我假设可以有多个子数组行。代码:(Demo)
作为一个小的微优化,在回调中使用条件可中断循环可以以更冗长的代码为代价。