PHP - 从多维数组中的键获取值

时间:2016-03-16 10:07:58

标签: php arrays multidimensional-array foreach

这是我的数组

$myArray = Array(
[63145] => Array
    (
        [id] => 63145
        [name] => banana
        [type] => fruit
    )

[244340] => Array
    (
        [id] => 244340
        [name] => apple
        [type] => fruit
    )

[253925] => Array
    (
        [id] => 253925
        [name] => portato
        [type] => vegetable
    )

[233094] => Array
    (
        [id] => 233094
        [name] => carrot
        [type] => vegetable
    ));

我如何遍历这个并拉出所有水果的ID,所以我可以在另一个foreach循环中使用它们?

  • 可能使用If语句,以便if(type == fruit)在foreach循环中使用id。

我试图查看其他问题,但我无法弄清楚如何将答案转换为我的数组(我知道我是菜鸟)..

2 个答案:

答案 0 :(得分:3)

天真:

$fruitIds = [];
foreach ($myArray as $item) {
    if ($item['type'] == 'fruit') {
        $fruitIds[] = $item['id'];
    }
}

功能:

$fruitIds = array_column(
    array_filter($myArray, function (array $i) { return $i['type'] == 'fruit'; }),
    'id'
);

效率更高的功能:

$fruitIds = array_reduce($myArray, function (array $ids, array $i) {
    return array_merge($ids, $i['type'] == 'fruit' ? [$i['id']] : []);
}, []);

答案 1 :(得分:1)

您可以使用PHP array_columnarray_filter执行此操作:

$fruit_ids = array_column(array_filter($arr, function($item, $index) {
  return $item['type'] == 'fruit';
}), 'id');

但是您的数组键似乎与子数组上的ID值相同,因此您可以将array_filterarray_keys混合使用:

$fruit_ids = array_keys(array_filter($arr, function($item, $index) {
  return $item['type'] == 'fruit';
}));