Foreach返回一个项目

时间:2014-12-04 12:57:45

标签: php arrays foreach

我有一些我无法理解的东西:

我正在使用foreach循环处理数组。该阵列有3个项目。我用这些项目做了一些事情,这些项目被存储回不同的数组。在foreach循环之后,我在数组中没有3个但只有4个项目...我使用var_dump和print_r检查了进程的每个部分,以检查是否存在"隐藏"导致此行为的项目,但我无法找到它。

Query的结果变为数组,结果集为3行。以下是代码示例:

 echo sizeOf($arrWithItems);  //returns 3
 $i=0;
 $newArrWithItems = array();

 foreach($arrWithItems as $item){
        $i++; //add one to the counter (only for testing)

        // do stuff with $item for example:
        $newArrWithItems[$item->id]['name'] = $item->name;
 }

 echo sizeOf($newArrWithItems) //returns 4
 echo $i   //returns 3

奇怪的是,当我在foreach循环中回显sizeOf($ newArrWithItems)时,它从0开始,并以2和3进一步。所以它跳过1.但是计数($ i)没有&#39 ; t跳过一步。

我在这里想念什么......或者有没有提示如何进一步调试?我已经用var_dump检查了$ arrWithItems,它只显示了3个项目,从0到2很好地编号。问题不仅仅发生在这个结果集中,但是它为这个处理的所有数组添加了一个项目foreach循环。

4 个答案:

答案 0 :(得分:1)

在foreach循环之前放这个:

 $newArrWithItems = array();

我试过,结果显示为3。

答案 1 :(得分:0)

在启动foreach循环之前,你确定$ newArrWithItems是空的吗? 可能是您可以在foreach'之前将其添加到您的代码中:

$newArrWithItems = array();

答案 2 :(得分:0)

再次与var_dump进行比较后,我发现了错误。这确实是“使用$ item的东西”中的一些内容,其中[$ item-> id]未在New Arr中设置。

答案 3 :(得分:0)

目前尚不清楚$ arrWithItems是ArrayObject还是只是数组?如果那是数组,这是一个简单的例子:

$arrWithItems = array(
    array("id"      => 1,
        "name"      => "Jack",
        "address"   => "Columbus",
        "age"       => 25),

    array("id"      => 3,
        "name"      => "Hyam",
        "address"   => "Wyan",
        "age"       => 26),

    array("id"      => 10,
        "name"      => "Jenny",
        "address"   => "Norfolk",
        "age"       => 25),
);

$newArrWithItems = array();

foreach($arrWithItems as $key=>$item){
    // do stuff with $item for example:
    $id = $item['id'];
    $newArrWithItems["$id"]["name"] = $item['name'];
}
echo sizeOf($newArrWithItems); //returns 3