【问题标题】:Error Showing Up in Server Logs...How Do I Stop It?服务器日志中出现错误...如何停止?
【发布时间】:2009-03-21 06:44:52
【问题描述】:

我遇到了一个错误,我用谷歌搜索了我能想到的所有内容,几乎没有任何见解。或许你能帮上忙。

我有一个返回对象数组的函数。调用这个函数的代码然后循环遍历这个数组并对每个对象执行它需要做的事情。当它吐出 HTML 时,它似乎在视觉上工作,但服务器日志仍然给出错误“为 foreach() 提供的参数无效”。是的,它在技术上很好用,但我不想再出现这个错误。想法?

<?php

// The class whose method returns an array of library_Label objects
class library_Label
{
  public $id = null;
  public $name = null;

  public function getChildren()
  {
    // $children is declared earlier
    return $children;
  }
}


// main code
$columns = new library_Label(1);
foreach ($columns->getChildren() as $label) echo $label->Name;

?>

【问题讨论】:

  • 你能给我们看一些代码吗?尤其是您返回的内容以及 foreach 的外观。
  • 没有代码...甚至没有语言!
  • 它是 PHP。抱歉,这似乎是一个重要的信息,不是吗?

标签: php arrays foreach invalid-argument


【解决方案1】:

这很常见,我的解决方案总是改变它:

foreach ($columns->getChildren() as $label) echo $label->Name;

$children = $columns->getChildren();
if (is_array($children)) foreach ($children as $label) echo $label->Name;

它应该涵盖所有情况。

您也可以将其扩展为带大括号的完整 if 语句,然后包含一个 else 块来处理如果您愿意,当 children 为空时的情况。

【讨论】:

    【解决方案2】:

    你没有说你使用的是什么语言,但这看起来像是一个 PHP 错误。如果是这样,请查看 PHP 的 error reporting levels。不过,您可能实际上应该更改 php.ini 中的值,以免将其他错误转储到服务器日志中。

    当然,无论如何,您都想知道为什么会抛出该错误。

    【讨论】:

      【解决方案3】:

      当您尝试对不是数组的变量执行 foreach 时,会出现警告 "Invalid argument supplied for foreach()"

      您需要检查来自getChildren() 的返回值实际上一个数组。

      我们无法从您的上下文中看出这一点,因为您既没有提供构造函数源代码,也没有提供实际创建 $children 的代码。如果这即将到来,那么帮助您可能会更容易。

      您可以尝试的一件事是在使用"print_r($columns-&gt;getChildren())" 执行foreach 之前打印出返回值。这应该清楚地表明它是否是一个数组。

      我还建议检查数组是否为空,使用 empty()count() - 网络上的一些站点指出空数组也会导致此警告,但我没有 PHP 环境回家测试一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-29
        • 2012-04-12
        • 2015-05-08
        • 2020-07-16
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多