Php 将四个foreach合并为一个foreach?
我正在尝试将4个foreach添加到一个中。我知道如何将2个foreach添加到这样的一个中:Php 将四个foreach合并为一个foreach?,php,foreach,Php,Foreach,我正在尝试将4个foreach添加到一个中。我知道如何将2个foreach添加到这样的一个中: foreach (array_combine($images, $covers) as $image => $cover) { foreach (array_combine($images, $covers) as $image => $cover) { foreach (array_combine($titles, $albums) as $title => $album)
foreach (array_combine($images, $covers) as $image => $cover) {
foreach (array_combine($images, $covers) as $image => $cover) {
foreach (array_combine($titles, $albums) as $title => $album) {
echo "$image-$cover-$title-$album"
但是我想添加两个以上的foreach$titles作为$title
和$albums作为$album
。
我不确定是否想要这样:
foreach (array_combine($images, $covers) as $image => $cover) {
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
将for-each语句放入函数中。然后创建一个调用它的循环
public function loopMe($images, $covers)
{
foreach (array_combine($images, $covers) as $image => $cover) {
$this->loopMe($image,$cover);
}
}
看起来您的第二个for循环在第一个for循环中的每个项都被多次调用。因此,您需要确保每个图像封面只调用第二个for循环一次。或者在第二个for循环上设置索引上限。例如,如果要将第一个For循环中的第一项映射到第二个For循环中的第一项,则应使用索引
public function loopMe($images)
{
for ($i = 0; $i < count($images); $i++) {
echo $images[$i] . '-'. $title[$i] . '-' . $cover[$i] . '-'. $album[$i];
}
}
公共函数loopMe($images)
{
对于($i=0;$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();
}
$myAlbumArray=新数组();
$myAlbumArray[]=新的MyAlbumThing(“演示”、“演示1”、“演示2”、“演示3”);
$myAlbumArray[]=新的MyAlbumThing(“其他演示”、“其他演示1”、“其他演示2”、“其他演示3”);
$lengthOfArray=sizeof(myAlbumArray);
对于($i=0;$i<$lengthOfArray;$i++){
echo$myAlbumArray[$i]>getString();
}
对不起,我的语法有任何错误,我在没有IDE帮助的情况下在浏览器中写的
我强烈建议学习更多关于面向对象PHP编程的知识。在我学习的过程中,我发现这篇文章特别有用:
编辑:
如果您确实发现此答案对您的问题有帮助,请将此答案标记为正确。您是否在所有项目上执行相同的任务?如果你只是想避免写重复的代码,我建议你把代码放在一个函数中,并把所需的数组传递给它。我不确定,并尝试这样做
foreach(array_combine($images,$covers)as$image=>cover){foreach(array_combine)($titles,$albums)作为$title=>$album){
您不确定吗?我们来看看您的代码,当您知道您想要完成什么时,请返回给我。请参阅更新的问题@CalebB@RobertW.GreeneJr.抱歉!您的答案不完整,递归函数需要断点、停止条件,否则将出现错误。无论如何都不起作用,因为$image
wi将是一个键,而不是数组,并且不能在数组_combine()中使用不管是谁打倒我都很糟糕。你知道我只是想帮忙。wtf。@Thiagaougusoliveira你甚至都不知道引用的是什么。他更新了他的问题,并考虑到当时他掌握的信息很少,我的回答是恰当的。不要只是投赞成票和反对票……投赞成票。