Foreach返回一个项目到很多

问题描述:

我有东西,我不能让我的头:Foreach返回一个项目到很多

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

查询的结果变成数组,结果集为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循环内回声整型尺寸($ newArrWithItems),它从0开始,用2和3所以它跳过更进一步但是,伯爵($ i)并没有跳过一步。

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

+1

你似乎并不在你的代码将被初始化'$ newArrWithItems',因此没有设想可以看 - 我们都知道,它的东西在完成这部分代码之前完全不相关。 – 2014-12-04 13:00:45

+0

它可能取决于'//在你的代码中使用$ item来做东西......在代码的那一部分,使用'$ i'还是'$ arrWithItems'? – RichardBernards 2014-12-04 13:01:11

+0

试过'var_dump($ newArrWithItems)'?什么是额外的元素? – 2014-12-04 13:03:12

把这个foreach循环之前:

$newArrWithItems = array(); 

我想和你开始foreach循环之前,显示结果为3

你确定$ newArrWithItems是空的? 可能是你可以之前“的foreach”添加到您的代码:

$newArrWithItems = array(); 

有再次的var_dump比较之后,我发现这个错误。这确实是“New Item with $ item”中没有在New Arr中设置[$ item-> id]的东西。

目前还不清楚$ 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