为什么我的 foreach 循环没有循环遍历和填充数组


Why is my foreach loop not looping through and populating array?

我有一个类,它循环遍历一个目录(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"
    }
  ]
}

使用 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);
    }
}
这正是

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);
    }
}

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