【问题标题】:Combine four foreach into one foreach?将四个 foreach 合并为一个 foreach?
【发布时间】:2015-08-07 18:19:55
【问题描述】:

我正在尝试将 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

【问题讨论】:

  • 您是否对所有项目执行相同的任务?您能否就您要完成的工作添加更多信息?
  • 如果您只是想避免编写重复的代码,我建议将该代码放入一个函数中并将所需的数组传递给它。
  • 我不确定并尝试这样foreach (array_combine($images, $covers) as $image => $cover) { foreach (array_combine($titles, $albums) as $title => $album) {
  • 您不确定?好吧,看看你的代码,当你知道你想要完成什么的时候回来找我。
  • 查看更新的问题。 @CalebB

标签: php foreach


【解决方案1】:

将 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];
   }
}

【讨论】:

  • @RobertW.GreeneJr。对不起!你的回答不完整,递归函数需要断点,停止条件,否则会报错。
  • 无论如何都不起作用,因为$image 将是一个键,而不是一个数组,并且不能在 array_combine() 中使用
  • 投票给我的人太糟糕了。你知道我只是想帮忙。 wtf.
  • @ThiagoAugustusOliveira 你甚至都不知道它是什么参考。他更新了他的问题,考虑到他当时的信息很少,我的回答是合适的。不要只是投反对票......贡献。
【解决方案2】:

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

类似这样的:

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

编辑: 如果您确实认为这对您的问题有帮助,请将此答案标记为正确。

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多