按内部值获取数组元素

时间:2016-01-06 12:26:10

标签: php

我有一个这样的数组:

$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
});

我该怎么做?谢谢!

3 个答案:

答案 0 :(得分:2)

你的做法是错误的。你想过滤什么?

来自$ids $avalue 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; 
    });