0

我遇到了一个错误,我用谷歌搜索了我能想到的所有东西,几乎没有任何见解。也许你可以用一双新的眼睛来帮忙。

我有一个返回对象数组的函数。调用这个函数的代码然后循环遍历这个数组并对每个对象执行它需要做的事情。当它吐出 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;

?>
4

3 回答 3

1

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

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

于 2009-03-21T06:49:07.287 回答
1

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

您需要检查实际的返回值getChildren()是否一个数组。

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

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

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

于 2009-03-21T08:02:06.067 回答
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 块来处理孩子为空时的情况。

于 2009-03-21T08:29:20.977 回答