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循环中处理的所有数组中。
答
把这个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
你似乎并不在你的代码将被初始化'$ newArrWithItems',因此没有设想可以看 - 我们都知道,它的东西在完成这部分代码之前完全不相关。 – 2014-12-04 13:00:45
它可能取决于'//在你的代码中使用$ item来做东西......在代码的那一部分,使用'$ i'还是'$ arrWithItems'? – RichardBernards 2014-12-04 13:01:11
试过'var_dump($ newArrWithItems)'?什么是额外的元素? – 2014-12-04 13:03:12