我有一个数组(代表 $Detective),如下所示:
Array
(
[detectiveid] => 52
[name] => Waal - Noord
[rise_value] => 2
[rise_time] => 3
[drop_value] => 2
[drop_time] => 3
[max_time] => 80
[max_speed] => 30
[max_range] => 1000
[min_hits] => 2
[virtuals] => Array
(
[103377] => Array
(
[virtualid] => 103377
[latitude] => 51.8683
[longitude] => 5.88432
[template] => enose
[peaks] => Array
(
[1697893319] => Array
(
[total] => 1.97
[ignore] =>
[datetime] => 2023-10-21 15:01:59
[timestamp] => 1697893319
)
)
)
[103378] => Array
(
[virtualid] => 103378
[latitude] => 51.8544
[longitude] => 5.86296
[template] => enose
[peaks] => Array
(
)
)
[103379] => Array
(
[virtualid] => 103379
[latitude] => 51.8765
[longitude] => 5.81837
[template] => enose
[peaks] => Array
(
[1697895022] => Array
(
[timestamp] => 1697895022
[datetime] => 2023-10-21 15:30:22
[total] => 1.83
[ignore] => 1
)
[1697895083] => Array
(
[timestamp] => 1697895083
[datetime] => 2023-10-21 15:31:23
[total] => 2.55
[ignore] =>
)
)
)
[103380] => Array
(
[virtualid] => 103380
[latitude] => 51.8825
[longitude] => 5.78394
[template] => enose
[peaks] => Array
(
)
)
)
)
但在某个时刻,我在使用
foreach ($detective['virtuals'] as $virtual)
时出现了意想不到的行为。然后我尝试使用foreach ($detective['virtuals'] as $key => $value)
并得到了预期的结果。
使用
foreach ($detective['virtuals'] as $virtual)
和 echo $virtual['virtualid']
给了我这个意想不到的结果:
103377
103378
103379
103379
使用
foreach ($detective['virtuals'] as $key => $value)
和 echo $detective['virtuals'][$key]['virtualid']
给了我这个意想不到的结果:
103377
103378
103379
103380
谁对此有解释?当我用 lower 方法替换 upper 方法时得到这些结果,如果我首先运行 upper 方法然后运行 lower 方法,那么 lower 方法也会回显上面的结果。看起来上面的方法不仅打印数组,还对其进行操作,从而破坏了数组。
我能得出的唯一结论是你数组中的数据不正确。
在第一个例子中
foreach ($detective['virtuals'] as $virtual)
您必须使用
$virtual['virtualid']
。在第二种情况下,您使用的是数组的实际键,而不是存储在数据中的值。
如果你遵循我的逻辑
$virtual['virtualid']
一定是错的。
您可以通过输出两者来检查
foreach ($detective['virtuals'] as $key => $virtual){
echo "key: ".$key;
echo "\n";
echo "virtualid: ".$virtual['virtualid'];
echo "------------------------\n";
}
这是唯一有意义的事情。