如何将四个foreach组合成一个foreach?

时间:2015-08-08 13:36:01

标签: php arrays foreach

我试图将四个foreach添加到一个foreach中。我不知道如何,但我这样做。这是一个例子:

 $images = "image1,image2,image3";
 $covers = "cover1,cover2,cover3";
 $titles = "title1,title2,title3";
 $albums = "album1,album2,album3";

 $images = explode(',', $images);
 $covers = explode(',', $covers);
 $titles = explode(',', $titles);
 $albums = explode(',', $albums);

 foreach (array_combine($images, $covers) as $image => $cover) {

 foreach (array_combine($titles, $albums) as $title => $album) {

 echo "$image - $cover - $title - $album</br>";        }}

但输出是:

image1 - cover1 - title1 - album1
image1 - cover1 - title2 - album2
image1 - cover1 - title3 - album3
image2 - cover2 - title1 - album1
image2 - cover2 - title2 - album2
image2 - cover2 - title3 - album3
image3 - cover3 - title1 - album1
image3 - cover3 - title2 - album2
image3 - cover3 - title3 - album3

需要输出:

image1 - cover1 - title1 - album1
image2 - cover2 - title2 - album2
image3 - cover3 - title3 - album3

3 个答案:

答案 0 :(得分:4)

您可以使用array_map()并遍历所有4个数组,例如

array_map(function($v1, $v2, $v3, $4){
    echo "$v1 - $v2 - $v3 - $v4</br>";
}, $images, $covers, $titles, $albums);

请注意,您不需要所有4个数组都具有相同的大小。

答案 1 :(得分:2)

我希望Nathans在上一个问题中回答,他将所有4个值存储在一个对象中并迭代这些对象。

如果你真的需要那些数组,那么为什么不只是使用一个普通的for循环呢?它适用于你需要索引的情况,它甚至可能更具可读性?

for ($index = 0; $index < count($images); $index++)
{
  echo "$images[$index] - $covers[$index] - $titles[$index] - $albums[$index]</br>";  
}

P.S。

您可以直接构建数组,而不是爆炸字符串:

$images = array('image1', 'image2', 'image3');

答案 2 :(得分:1)

替代方式

 foreach($covers as $key=>$cover){
    echo $images[$key]."-".$cover ."-".$titles[$key]."-".$albums[$key]."<br/>";
 }