Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP嵌套foreach返回键两次_Php_Multidimensional Array_Foreach_Rrdtool - Fatal编程技术网

PHP嵌套foreach返回键两次

PHP嵌套foreach返回键两次,php,multidimensional-array,foreach,rrdtool,Php,Multidimensional Array,Foreach,Rrdtool,我不是一个编码员,我正在尝试做下面的事情,并且在尝试做这件事的时候失去了理智。我确信答案可能和他们得到的一样基本,但我似乎找不到答案 不管怎么说,这就是。 具有多维数组: Array [module 2] => Array ( [1] => SimpleXMLElement Object ( [0] => module 2 EARL outlet temperature )

我不是一个编码员,我正在尝试做下面的事情,并且在尝试做这件事的时候失去了理智。我确信答案可能和他们得到的一样基本,但我似乎找不到答案

不管怎么说,这就是。 具有多维数组:

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绘制的温度

感谢昨晚其他人的帮助,我能够通过“module#”(我如何使用上面的数组)对值进行正确分组。但是现在,每次运行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

我不太确定您的PHP版本(可能是您的对象,因为我不使用这些对象),但我使用与您完全相同的代码和数组结构,并得到相同的结果。就像deceze说的,你确定你没有运行程序两次吗?该文件正在附加模式下使用,因此第二次运行不会覆盖第一次运行,只会将其连接到该文件上

如果您没有运行两次,并且代码仍然会给您错误,那么您可以使用备用代码来玩这些键。试一试,功能应该是相同的,也许它可以解决您的错误(如果上面没有):


我不太确定您的PHP版本(可能是您的对象,因为我不使用这些对象),但我使用与您完全相同的代码和数组结构,并得到相同的结果。就像deceze说的,你确定你没有运行程序两次吗?该文件正在附加模式下使用,因此第二次运行不会覆盖第一次运行,只会将其连接到该文件上

如果您没有运行两次,并且代码仍然会给您错误,那么您可以使用备用代码来玩这些键。试一试,功能应该是相同的,也许它可以解决您的错误(如果上面没有):


确定你没有只运行代码两次,它写入日志两次吗?确定你没有只运行代码两次,它写入日志两次吗?谢谢,是的。。。看起来Nagios代码出于某种原因运行了两次。很高兴知道我没有发疯,而且就我对代码的理解而言,我还可以出去吃午饭!谢谢是的。。。看起来Nagios代码出于某种原因运行了两次。很高兴知道我没有发疯,而且就我对代码的理解而言,我还可以出去吃午饭!
$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);
    }
  }
}