将四个foreach合并为一个foreach?

时间:2015-08-07 18:19:55

标签: php foreach

我正在尝试将4个foreach添加到一个中。我知道如何将2个foreach添加到这样的一个:

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

但我想添加更多两个foreach $titles as $title$albums as $album。 我不确定要这样:

foreach (array_combine($images, $covers) as $image => $cover) {
 foreach (array_combine($titles, $albums) as $title => $album) {
                               echo "$image-$cover-$title-$album"

它显示每个输出的副本。我的​​意思是输出

demo-demo1-demo2-demo3demo-demo1-demo2-demo3

仅需输出

demo-demo1-demo2-demo3

2 个答案:

答案 0 :(得分:1)

将for each语句放入函数中。然后创建一个调用它的循环。

unique(x)[3]

看起来你的第二个for循环在第一个for循环中每个项目被多次调用。因此,您需要确保每个图像封面只调用第二个for循环。或者在第二个for循环上设置索引上限。例如,如果要将第一个for循环中的第一个项映射到第二个for循环中的第一个项,则应使用索引。

public function loopMe($images, $covers)
{
   foreach (array_combine($images, $covers) as $image => $cover) { 
      $this->loopMe($image,$cover); 
   }
}

答案 1 :(得分:1)

我认为你是从错误的角度来解决这个问题。据我所知,你试图输出某些东西的属性。我想你想要做的是通过创建一个类并使用一个方法来输出对象的内容,从面向对象的方法中解决这个问题。

这样的事情:

class MyAlbumThing {
    protected $image;
    protected $cover;
    protected $title;
    protected $album;

    public __construct($image, $cover, $title, $album) {
        $this->image = $image;
        $this->cover = $cover;
        $this->title = $title;
        $this->album = $album;
    }

    public getImage() {
        return $this->image;
    }

    public getCover() {
        return $this->cover;
    }

    public getTitle() {
        return $this->title;
    }

    public getAlbum() {
        return $this->album;
    }

    public getString() {
        return $this->image . '-' . 
            $this->cover . '-' . 
            $this->title . '-' . 
            $this->album;
    }
}

然后,您可以实例化此类并打印您的属性:

MyAlbumThing album = new MyAlbumThing("demo", "demo1", "demo2", "demo3");
echo $album->getString();

输出:

demo-demo1-demo2-demo3

另外,如果你有很多这些东西,那么你会使用foreach,就像这样:

$myAlbumArray = new array();
$myAlbumArray[] = new MyAlbumThing("demo", "demo1", "demo2", "demo3");
$myAlbumArray[] = new MyAlbumThing("anotherdemo", "anotherdemo1", "anotherdemo2", "anotherdemo3");

$lengthOfArray = sizeof(myAlbumArray);
for ($i = 0; $i < $lengthOfArray; $i++) {
    echo $myAlbumArray[$i]->getString();
}

很抱歉我的语法有任何错误,我在没有IDE帮助的情况下在浏览器中写道。

我强烈建议您更多地了解面向对象的PHP编程。我在学习时发现这篇文章特别有用:http://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762

修改: 如果您确实发现这对您的问题有帮助,请将此答案标记为正确。