我有一个这样的数组:
$a = [
0 => ['a' => ['id' => 10, 'value' => 111]],
1 => ['a' => ['id' => 20, 'value' => 222]],
2 => ['a' => ['id' => 30, 'value' => 333]]
];
我想在array_filter()
中使用此数组来过滤$ids
,比较value
:
$ids = [10, 20, 30];
$filtered = array_filter($ids, function($id) use($a) {
return $a[$id][$value] == 222; //this is wrong, just to show what I'm trying
});
我该怎么做?谢谢!
答案 0 :(得分:2)
你的做法是错误的。你想过滤什么?
来自$ids
$a
和value
222的$ids = array();
foreach ($a as $item) {
if ($item['a']['value'] == 222)
$ids[] = $item['a']['id'];
}
的所有元素?
然后这样做:
array_filter
更新:id
返回完整的数组项,这意味着它不会仅返回$ids = array_filter($a, function($v) { return $v['a']['value'] == 222; } );
:
2016-01-06T00:00:00+05:30
答案 1 :(得分:0)
问题是,$a
没有10,20,30个键但是0,1,2。当你在闭包内使用$a[$id]
时,它会迭代$a[10]
,{ {1}},$a[20]
(不存在)。
如果要过滤$a[30]
,请将$a
作为array_filter的第一个参数。您使用$a
作为第一个参数,但它不会$ids
。
答案 2 :(得分:0)
其实我不知道为什么你需要$ ids数组。伙计说的正确,你应该走一个数组,代码将是
$filtered = array_filter($a, function($item) {
return $item['a']['value'] == 222;
});