我有一些我无法理解的东西:
我正在使用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循环。
答案 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