PHP вложил foreach, возвращая ключ дважды

Не будучи программистом, я пытаюсь сделать следующее и схожу с ума, пытаясь это сделать. Я уверен, что ответ, вероятно, так же прост, как и они, но я не могу найти ответ.

В любом случае, здесь идет. Имеют многомерный массив:

Array
[module 2] => Array
    (
        [1] => SimpleXMLElement Object
            (
                [0] => module 2 EARL outlet temperature
            )

        [2] => SimpleXMLElement Object
            (
                [0] => module 2 inlet temperature
            )
        [15] => SimpleXMLElement Object
            (
                [0] => module 2 EARL inlet temperature
            )

        [19] => SimpleXMLElement Object
            (
                [0] => module 2 outlet temperature
            )

    )

[module 6] => Array
    (
        [3] => SimpleXMLElement Object
            (
                [0] => module 6 EARL inlet temperature
            )

        [4] => SimpleXMLElement Object
            (
                [0] => module 6 asic-4 temperature
            )

        [11] => SimpleXMLElement Object
            (
                [0] => module 6 RP inlet temperature
            )

        [24] => SimpleXMLElement Object
            (
                [0] => module 6 asic-3 temperature
            )

        [25] => SimpleXMLElement Object
            (
                [0] => module 6 inlet temperature
            )

        [26] => SimpleXMLElement Object
            (
                [0] => module 6 EARL outlet temperature
            )

        [28] => SimpleXMLElement Object
            (
                [0] => module 6 outlet temperature
            )

        [30] => SimpleXMLElement Object
            (
                [0] => module 6 RP outlet temperature
            )

    )

Мне нужно, чтобы из каждого массива (модуль 1, модуль 2 и т. Д.) Возвращались числовые ключи из каждого значения подмассива. По сути, каждый из ключей подмассива соответствует ключу другого массива, который содержит температуры, которые будут отображаться с помощью rrdtool.

Благодаря тому, что кто-то еще помог мне вчера вечером, я смог правильно сгруппировать значения по "модулю #" (как я в итоге оказался с массивом выше). Но теперь каждый раз, когда я пробегаю свои циклы foreach (ниже), я получаю результаты, возвращаемые дважды.

## Just for testing my foreach loops
foreach ($groupedmods as $modgroupname => $sensorname) {
    foreach ($sensorname as $dsindex => $sensor) {
        if($dsindex != 0) {
        file_put_contents('/usr/local/nagiosxi/var/php.log', print_r($dsindex, true). "\n",     FILE_APPEND);
        }
    }
}
## Draw some graphs
#foreach ($groupedtemps as $modgroupname ) {
#       $ds_name[$dcnt] = "Module Temps Test";
#       $opt[$dcnt] = "--vertical-label \"Temp\" --title \"Module Temps Test \" ";
#
#       foreach ($modgroupname as $dsindex ) {
#               if($dsindex != 0) {
#file_put_contents('/usr/local/nagiosxi/var/php.log', print_r($dsindex, true ). "\n", FILE_APPEND);
#                $def[$dcnt] = "DEF:var$dsindex=$rrdfile:$DS[$dsindex]:AVERAGE " ;
#                $def[$dcnt] .= "LINE2:var$dsindex#F00808:$sensor\"\" " ;
#               }
#       } 
#}

выводит список нужных мне индексов два раза:

1
2
15
19
3
4
11
24
25
26
28
30
5
16
17
20
21
22
23
29
6
8
7
18
9
31
10
27
12
35
13
32
14
33
34
1
2
15
19
3
4
11
24
25
26
28
30
5
16
17
20
21
22
23
29
6
8
7
18
9
31
10
27
12
35
13
32
14
33
34

1 ответ

Решение

Не совсем уверен, что происходит с вашей версией PHP (может быть, это ваши объекты, поскольку я их не использую), но я использую точно такой же код и структуру массива, что и вы, и получаю тот же результат. Как говорит Десец, вы не запускали программу дважды? Файл используется в режиме добавления, поэтому второй прогон не будет перезаписывать первый и просто конкататится на него.

Если вы не запускали его дважды, а код по-прежнему выдает ошибки, вы можете использовать альтернативный код, чтобы просто поиграть с клавишами. Дайте этому шанс, функциональность должна быть такой же, и, возможно, она решит ваши ошибки (если выше не поможет):

$mod_keys = array_keys($groupedmods);
foreach ($mod_keys as $k) {
  $new_keys = array_keys($groupedmods[$k]);
  foreach ($new_keys as $key) {
    if ($key != 0) {
      file_put_contents('/usr/local/nagiosxi/var/php.log', print_r($key, true)."\n", FILE_APPEND);
    }
  }
}
Другие вопросы по тегам