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,但我无法找到问题的答案,部分原因是因为我不确定要准确要求什么.任何帮助?
天真的方式:
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)
这首先按类别将所有图像分组为一个新数组,然后您可以直接循环一次.