【问题标题】:PHP why doesn´t the foreach function work?PHP 为什么 foreach 函数不起作用?
【发布时间】:2020-12-27 22:31:20
【问题描述】:

再次发布,因为我是新手,不知道问题的格式应该如何正确。

关于这个问题,我应该做this,因为这个应该写在一个窗口中,而不是在代码中。

这是完整的代码(变量主要用于不同的练习):

 $all_pics = glob("pics/*.*");
      $all_pics_clear = str_replace(["pics/",".jpg",".png"],"",$all_pics);
      $all_pics_clear = str_replace(["_","-"], " ",$all_pics_clear);
    
   

     for($i = 0; $i < count($all_pics); $i++){
        echo "{ type: 'quiz', title: '"
                .$all_pics_clear[$i]
                ."', pic: '"
                .str_replace("pics-new/","",$all_pics[$i])
                ."' },<br>";
    }

为什么 foreach 函数不能用这个?

foreach ($all_pics as $filename) {
        echo "{ type: 'quiz', title: '"
            .$all_pics_clear
            ."', pic: '"
            .str_replace("pics-new/","",$all_pics)
            ."' },<br>";
    }

它一直告诉我“数组到字符串的转换错误”。

Notice: Array to string conversion in C:\laragon\www\ukol8\ukolD\ukolD.php on line 38 { type: 'quiz', title: 'Array', pic: 'Array' },

为什么 for 函数可以使用它?

因为我是初学者,我会很感激一个白痴的解释,很多编程概念都超出了我的能力,我什至不得不查找 for 函数的解决方案,因为我永远不会想到做。

编辑:使用 for 循环更新代码,因为它有效,glob 返回数组的事实很有帮助..我不知道 php 编程和 stackoverflow 的正确方法,所以它可能花点时间了解一下 cmets.cheers 的家伙

edit2:对不起,我真的不知道如何在这里发布数组,数组看起来像this

  • 到目前为止,我只能以这种方式使用 foreach 循环,这显然只是在开始时写出值但 20 次。 如何让它遍历所有数组项,并将它们全部写出来?
 foreach ($all_pics_clear as $value) {
            echo "{ type: 'quiz', title: '"
                .$all_pics_clear[0]
                ."', pic: '"
                .str_replace("pics-new/","",$all_pics[0])
                ."' },<br>";
        }

【问题讨论】:

  • 你没有到达 foreach。我猜第 38 行是$all_pics_clear = str_replace(["pics/",".jpg",".png"],"",$all_pics);,这不起作用,因为 glob 返回一个数组,而不是字符串,所以 str_replace 不起作用。
  • 所以你想用你自己复杂的方式echo json_encode($all_pics);?
  • 或者也许还有更多,但是调试你看不到的东西(数组)真的很难。在此处将数组作为 var_export 发布,以便我们为您提供帮助。
  • $all_pics 的值是多少?我们不知道您在pics/*.* 文件夹中的内容是什么。
  • 谢谢你。 glob 返回数组的事实是非常必要的。否则,不是所有的初学者都在做不必要的复杂事情吗?哈哈,我不知道如何将数组发布为 var_export,所以我至少添加了数组的图像,如果应该以不同的方式完成,请告诉我。 pics 文件夹中的内容实际上是图片(png 或 jpg)。

标签: php arrays for-loop foreach


【解决方案1】:
foreach ($all_pics as $filename) {

这里$all_pics 是数组,而$filename 是每个项目的内容,您要在循环中使用它。

您在循环内引用 $all_pics 和 $all_pics_clear。两者都是数组,这就是为什么在尝试将它们与字符串连接时会收到该警告的原因。

另外,如果您想在循环中获取项目的键,您可以使用... as $key =&gt; $value 构造:

foreach ($all_pics as $i => $filename) {
        echo "{ type: 'quiz', title: '"
            .$all_pics_clear[$i] // use $i-th item from $all_pics_clear array
            ."', pic: '"
            .str_replace("pics-new/","",$filename) // use $filename (which is the $i-th item from $all_pics)
            ."' },<br>";
    }

【讨论】:

  • 谢谢!我知道它与 $key => $value 有关,但我真的不知道如何使用它。也感谢您的解释,我只是想正确理解我遇到的错误,同时我不满足于使用 for 循环哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 2021-10-28
  • 2016-06-20
相关资源
最近更新 更多