为什么我的foreach循环没有循环并填充数组?

时间:2014-12-08 22:09:34

标签: php arrays foreach

我有一个循环遍历目录的类(5个图像),并将每个图像转换为base64格式并填充数组。但是,似乎foreach循环只循环一次。目录中有5个图像,因此它应该有5次迭代,阵列也应该是5个不同的图像。

PHP

require_once "Results.php";
require_once "ImageHelper.php";

class IntroImageHelper {
    public static function GetImages()
    {
      $results = new Results();
      $results->IntroImages = Array();
      $dir = new DirectoryIterator("img/");
      $ImageExists = false;
      foreach($dir as $file)
      {
        if($file->isFile())
        {
          $ImageExists = $file->__toString();
          break;
        }
      }

      if($ImageExists)
      {
        $tempImage = new Results();
        $tempImage->ImageName = $ImageExists;
        $tempImage->ImageData = ImageHelperIntroSlides::DownloadImage($file);
        array_push($results->IntroImages, $tempImage);
      }

       return $results;
    }
}

输出:

{"IntroImages: [
    {"ImageName": "image.png",
     "ImageDate": "base64imagedata"
    }
  ]
}

3 个答案:

答案 0 :(得分:4)

使用break语句将停止循环。您可以使用continue跳过当前迭代的其余执行并转到下一次迭代,但在您的情况下,省略break将解决您的问题:

foreach($dir as $file) {
    if($file->isFile()) {
      $ImageExists = $file->__toString();
    }
}

在你的情况下,当你应该在里面时,你的一堆代码在循环之外:

foreach($dir as $file) {
    if($file->isFile()) {
      $ImageExists = $file->__toString();
    }
    if($ImageExists) {
        $tempImage = new Results();
        $tempImage->ImageName = $ImageExists;
        $tempImage->ImageData = ImageHelperIntroSlides::DownloadImage($file);
        array_push($results->IntroImages, $tempImage);
    }
}

但你也可以将这两个陈述结合起来:

foreach($dir as $file) {
    if($file->isFile()) {
        $tempImage = new Results();
        $tempImage->ImageName = $file->__toString();
        $tempImage->ImageData = ImageHelperIntroSlides::DownloadImage($file);
        array_push($results->IntroImages, $tempImage);
    }
}

答案 1 :(得分:0)

为什么你在for循环中有中断?这将退出循环......

答案 2 :(得分:0)

这正是break将会做的事情,它会突破

如果您只需要标记一个值,请删除中断并让迭代继续。

但是在你的情况下你不需要,因为检查将你的循环更改为以下内容:

foreach($dir as $file)
{
    if($file->isFile())
    {
        $tempImage = new Results();
        $tempImage->ImageName = $file->__toString();
        $tempImage->ImageData = ImageHelperIntroSlides::DownloadImage($file);
        array_push($results->IntroImages, $tempImage);
    }
}