1

私はコーダーではないので、次のことをしようとしていますが、それをやろうとすると頭がおかしくなります。答えはおそらく彼らが得るのと同じくらい基本的なものだと確信していますが、私は答えを見つけることができないようです。

とにかく、ここに行きます。多次元配列があります:

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ループ(以下)を実行するたびに、結果が2回返されます。

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

必要なインデックスのリストを2回出力します。

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
4

1 に答える 1

1

Not super sure what's going on with you're version of PHP (maybe it's your objects, since I'm not using those), but I use the exact same code and array structure you do and get the same result. Like deceze says, sure you didn't run the program twice? The file is being used in append mode, so a second run won't overwrite the first and will just concat onto it.

If you didn't run it twice and the code still gives you errors you can use alternate code to just play with the keys. Give this a shot, the functionality should be the same and maybe it will solve your errors (if the above doesn't):

$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);
    }
  }
}
于 2013-01-09T02:31:31.973 に答える