循环遍历对象数组时发生额外的循环迭代

时间:2011-06-03 21:17:00

标签: php

我制作了这个对象数组

$trailheads[] = new StdClass;

然后每次循环时我都会在其中放置一个物体

$trailheads[] = $trailhead;

然后我从这个函数返回了整个东西:

$ret->ok = empty($errors);
$ret->errors = $errors;
$ret->o = $trailheads;

return $ret;

一旦我得到了值,并在trailheads []中循环结果,我继续循环3次而不是预期的2.是否有理由进行额外的迭代?

以下是我尝试循环的方法:

foreach ($trailhead_list->o as $key)
{
    $objkey  = (object) $key;
    echo '<p><h3>Trailhead Name: '.$objkey->trailhead_name.'</h3></p>';
    }

3 个答案:

答案 0 :(得分:2)

之后:

$trailheads[] = new StdClass;

你的$trailheads数组包含on元素,一个StdClass的实例。

然后你添加更多元素,但会有第一个元素。

也许您想要像这样初始化$trailheads[],但是您为其中一个数组元素赋予了价值。请改用:

$trailheads = array();

答案 1 :(得分:1)

此:

  

我制作了这个对象数组

     

$ trailheads [] = new StdClass;

...似乎是额外数组元素的来源。像这样实例化一个空数组:

$trailheads = array();

然后循环并添加对象:

$trailheads[] = $trailhead;

另请注意:我猜您没有启用通知或警告。在你发育的时候打开它们。行$trailheads[] = new StdClass;会生成一个通知,因为您要向尚未声明为数组(或其他任何内容)的变量添加新元素。 PHP的宽松打字是非常宽容的,但是这一行会产生一个通知。

开发时的警告和注意事项,请将其关闭以进行生产。它将帮助您避免常见的错误,它将使您成为更好的程序员来启动。

答案 2 :(得分:0)

在行中:

$trailheads[] = new StdClass;

您正在将新的StdClass对象分配到$ trailheads数组中。也就是说,您并未将其声明为变量,而是实际添加元素。