【问题标题】:Getting an error on my foreach loop在我的 foreach 循环中出错
【发布时间】:2010-03-12 16:47:59
【问题描述】:

代码如下:

<?php

//Starting session

session_start();

//Includes mass includes containing all the files needed to execute the full script
//Also shows homepage elements without customs

require_once ('includes/mass.php');

$username = $_SESSION['username'];

if (isset($username))

{   

//Query database for the users networths

$sq_l = "SELECT * FROM user ORDER BY worth";

$sql_query_worth = mysql_query($sq_l);

while ($row = mysql_fetch_assoc($sql_query_worth))

      {

         $dbusername = $row['username'];

         $dbworth    = $row['worth'];

            foreach ($dbusername as $dbuser)

                {
                    echo ". USER: ".$dbuser." Has a networth of:  ".$dbworth;

                }
      }               
}

?>

有三个结果。这是错误。

这是错误信息:

警告:第 32 行 C:\xampp\htdocs\Mogul\richlist.php 中为 foreach() 提供的参数无效

警告:第 32 行 C:\xampp\htdocs\Mogul\richlist.php 中为 foreach() 提供的参数无效

警告:第 32 行 C:\xampp\htdocs\Mogul\richlist.php 中为 foreach() 提供的参数无效

【问题讨论】:

  • 看来$dbusername不是数组。
  • foreach 是干什么用的? `$dbusername`` 不是字符串吗?
  • 你想完成什么?错误信息很清楚,循环没有任何意义。
  • 是 :) 我刚刚查过了。

标签: php loops foreach


【解决方案1】:

只是改变:

        foreach ($dbusername as $dbuser)

            {
                echo ". USER: ".$dbuser." Has a networth of:  ".$dbworth;

            }

到:

echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;

【讨论】:

    【解决方案2】:

    那是因为您没有将数组传递给 foreach 循环。试试这个:

    while ($row = mysql_fetch_assoc($sql_query_worth))
    {
        $dbusername = $row['username'];
        $dbworth    = $row['worth'];
        echo "USER: ".$dbusername ." Has a networth of:  ".$dbworth;              
    }
    

    【讨论】:

      【解决方案3】:

      foreach() 遍历一个数组。很可能$dbusername 是一个字符串,这意味着您应该摆脱foreach() 并直接回显$dbusername

      【讨论】:

        【解决方案4】:

        您正在尝试像数组一样遍历字符串 - foreach 需要 array() 输入

        【讨论】:

          【解决方案5】:

          不需要您的foreach 循环;这应该会更好:

          while ($row = mysql_fetch_assoc($sql_query_worth))
          {
            $dbusername = $row['username'];
            $dbworth    = $row['worth'];
            // The username is in $dbusername
            // And the worth is in $dbworth
            // So, just use those :
            echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;     
          }
          


          基本上:

          • mysql_fetch_assoc 获取当前行的数据到$row
          • 表示$row 是一个数组,其中包含usernameworth
          • 您正在将这两个数组条目的值分配给$dbusername$dbworth
            • 现在包含字符串
            • 并且可以直接使用:它们不包含任何子数组。


          如果您想更好地了解变量包含的内容,可以使用 print_rvar_dump ;例如,像这样:

          while ($row = mysql_fetch_assoc($sql_query_worth))
          {
            var_dump($row;)
            $dbusername = $row['username'];
            $dbworth    = $row['worth'];
            var_dump($dbusername, $dbworth);
            echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;     
          }
          

          【讨论】:

            【解决方案6】:

            为什么你需要foreach?那不是数组。你应该在 foreach 之外有这个。

            echo ". USER: ".$dbuser." Has a networth of: ".$dbworth;

            【讨论】:

              【解决方案7】:

              您错误地调用了foreach。它需要一个数组作为第一个参数。在这种情况下,只需删除 foreach,因为您已经有一个 while 循环遍历您的数据库查询结果。

              【讨论】:

                猜你喜欢
                • 2013-12-18
                • 2014-06-06
                • 2021-05-28
                • 2019-06-16
                • 1970-01-01
                • 1970-01-01
                • 2017-12-22
                • 1970-01-01
                相关资源
                最近更新 更多