【问题标题】:Invalid argument supplied for foreach! [duplicate]为 foreach 提供的参数无效! [复制]
【发布时间】:2011-03-11 23:44:34
【问题描述】:

可能重复:
Invalid argument supplied for foreach()

我有以下代码:

<?
foreach($format as $form)
{
    echo $form;
    ?>
    <ul>
        <?
        $s = $database->onlineFormatUsers($form);
        while($row=mysql_fetch_assoc($s))
        {
            $username=$row['username'];
            $id=$row['id'];?>
            <li><a href="../userprofile.php?id=<?echo $id?>"><?echo "$username";?></a></li>
        <?
        }
        ?>
    </ul>
    <?
}
?>

<? 
//the active formats
$f = $database->activeFormats();
while($row=mysql_fetch_assoc($f))
{
    $format=$row['name'];
}
?>

这是在说它是一个无效的论点? 有什么理由吗? 谢谢

【问题讨论】:

  • 请说明$format的来源。
  • 在 foreach 循环之前,您能给我们一个$formatprint_rvar_dump 吗?
  • $format 似乎是在 foreach 之后而不是之前填充的。将 DB 输出的处理移到 foreach 之前。您仍然应该使用数组检查,以防万一数据库没有返回任何内容。
  • 是的,以前的,我只是加了给你看。

标签: foreach php


【解决方案1】:

$format 可能不是数组。

foreach 块包装在if(is_array($format)) { } 块中或通过执行$format = (array)$format 将其转换为数组。

【讨论】:

  • 哦,格式需要是数组吗?我将编辑以显示 $format 的来源。
  • 是的,foreach 仅适用于数组。
  • 而不是做 $format = (array)$format;你可以立即做 foreach((array)$format as $form)
  • @xeross 是的,你可以。为了可读性,我更喜欢单独转换它 - 如果它在 foreach 调用中,很容易直接通过转换 - 但这是一个偏好问题。
【解决方案2】:

你确定 $format 是一个数组吗?放一个

<?php echo gettype($format); ?>

在 foreach 循环之前

【讨论】:

    【解决方案3】:

    $format 不是数组或不存在! 在 foreach 之前

    if(is_array($format)){  
       foreach($format ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 2011-02-07
      相关资源
      最近更新 更多