在我的foreach循环中出错

时间:2010-03-12 16:48:00

标签: php loops foreach

以下是代码:

<?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()提供的参数无效

7 个答案:

答案 0 :(得分:5)

只需改变:

        foreach ($dbusername as $dbuser)

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

            }

到:

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

foreach()遍历数组。最有可能$dbusername是一个字符串,这意味着您应该删除foreach()并直接回复$dbusername

答案 3 :(得分:0)

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

答案 4 :(得分:0)

不需要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;     
}

答案 5 :(得分:0)

为什么你需要那里的foreach?那不是阵列。你应该把它放在foreach之外。

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

答案 6 :(得分:0)

您正在正确呼叫foreach。它期望一个数组作为第一个参数。在这种情况下,只需删除foreach,因为您已经有一个while循环迭代数据库查询结果。