两个阵列,一个输出(如何每个?)

f8x*_*der 1 php arrays foreach

有没有办法通过一个数组foreach()基于匹配值与另一个数组中的不同键?在这个例子中,我有一个类别数组($ cat_data),其中cat_id作为键,以及一个以category_id为键的图像数组($ img_data).

Array (
   [0] => Array (
        [cat_id] => 1
        [cat_name] => Category 1
   )
   [1] => Array (
        [cat_id] => 2
        [cat_name] => Category 2
   )
)
Array (
   [0] => Array (
        [img_id] => 2
        [img_name] => demo1.jpg
        [img_label] => Demo 1
        [category_id] => 2
        [img_order] => 1
   )
   [1] => Array (
        [img_id] => 3
        [img_name] => demo2.jpg
        [img_label] => Demo 2
        [category_id] => 2
        [img_order] => 2
   )
   [2] => Array (
        [img_id] => 4
        [img_name] => demo3.jpg
        [img_label] => Demo 3
        [category_id] => 1
        [img_order] => 1
   )
)
Run Code Online (Sandbox Code Playgroud)

我想要的是输出我的显示器,如下所示:

Category 1
  demo3.jpg

Category 2
  demo1.jpg
  demo2.jpg
Run Code Online (Sandbox Code Playgroud)

由于我真的不擅长完全掌握数组,我以为我会尝试使用Stack,但我无法找到问题的答案,部分原因是因为我不确定要准确要求什么.任何帮助?

dec*_*eze 5

天真的方式:

foreach ($cat_data as $cat) {
    echo $cat['cat_name'];

    foreach ($img_data as $img) {
        if ($img['category_id'] != $cat['cat_id']) {
            continue;
        }

        echo $img['img_name'];
    }
}
Run Code Online (Sandbox Code Playgroud)

这是相当低效的,因为它循环遍历$imgs数组几次,但很容易并且有效.

更高效:

$images = array();
foreach ($img_data as $img) {
    $images[$img['category_id']][] = $img;
}

foreach ($cat_data as $cat) {
    echo $cat['cat_name'];

    if (isset($images[$cat['cat_id']])) {
        foreach ($images[$cat['cat_id']] as $img) {
            echo $img['img_name'];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这首先按类别将所有图像分组为一个新数组,然后您可以直接循环一次.