Объединить четыре foreach в один 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

Поместите для каждого утверждения функцию. Затем создайте цикл, который его вызывает.

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

Похоже, ваш второй цикл цикла вызывается несколько раз за элемент в первом цикле. Поэтому вы хотите удостовериться, что вы вызываете только второй цикл для одного изображения. или установите колпачок индекса во втором цикле. Например, если вы являетесь tyring для сопоставления первого элемента в первом цикле для первого элемента во втором цикле, вы должны использовать индекс.

 public function loopMe($images) { for ($i = 0; $i < count($images); $i++) { echo $images[$i] . '-'. $title[$i] . '-' . $cover[$i] . '-'. $album[$i]; } } 

Я думаю, вы приближаетесь к этой проблеме с неправильного угла. Из того, что я могу сказать, вы пытаетесь вывести свойства чего-то. Я думаю, что вы хотите сделать это, опираясь на объектно-ориентированный подход, создав класс и используя метод для вывода содержимого вашего объекта.

Что-то вроде этого:

 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

EDIT : Пожалуйста, отметьте этот ответ как правильный, если вы действительно нашли это полезным для своей проблемы.