通过迭代或使用键,foreach 具有相同的数组但不同的输出

问题描述 投票:0回答:1

我有一个数组(代表 $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 方法也会回显上面的结果。看起来上面的方法不仅打印数组,还对其进行操作,从而破坏了数组。

php multidimensional-array foreach key-value
1个回答
0
投票

我能得出的唯一结论是你数组中的数据不正确。

在第一个例子中

 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";
 }
 

这是唯一有意义的事情。

© www.soinside.com 2019 - 2024. All rights reserved.