运行下面的代码时,我遇到了意外的行为。
这是正在发生的事情
一旦满足条件(if ($item_key === 3 || $item_key === 7)
,并且项目3 移到 $ items_arr 的开头,即 {{1} } 语句跳转到最后一个索引。导致进一步的索引(包括项目7 )未得到处理。
我想知道内部发生了什么,为什么一旦数组开始拼接后, foreach
语句中为什么似乎出现异常终止。
有趣的是,当某些数组在 $ items_arr 的末尾进行拼接时,没有这种行为。
任何想法都值得赞赏。预先感谢。
foreach
输出:
<?php
$items_arr = [];
// adding some items
for ($i = 0; $i < 10; $i++)
{
$items_arr[] = [
"id" => $i,
"name" => "Item {$i}",
];
}
/*
* Some items need to be moved at the
* beginning of the array.
*/
$i = 0;
foreach ($items_arr as $item_key => &$item)
{
print "Processing: {$item['name']}" . PHP_EOL;
// some condition is met
if ($item_key === 3 || $item_key === 7)
{
array_splice($items_arr, $i, 0, [$item]);
$i++;
unset($items_arr[$item_key + $i]);
}
}
答案 0 :(得分:1)
您正在循环中修改{'00:00:00': {('indoor', 'AC'): 1362.2142857142858,
('indoor', 'Computer'): 399.0,
('indoor', 'Heater'): 2258.375,
('indoor', 'Lights'): 1535.0,
('indoor', 'Microwave'): 1420.0,
('indoor', 'Refridgerator'): 192.38888888888889,
('indoor', 'Television'): 243.66666666666666,
('outdoor', 'AC'): 3470.705882352941,
('outdoor', 'Computer'): 412.4,
('outdoor', 'Heater'): 2274.6666666666665,
('outdoor', 'Lights'): 3475.4736842105262,
('outdoor', 'Microwave'): 1489.9333333333334,
('outdoor', 'Refridgerator'): 195.07692307692307,
('outdoor', 'Television'): 261.5}
,从而使foreach循环不同步(说实话,这是我描述它的最佳方式)。您需要缩短循环并在发生突变时重新开始。
$items_arr