PHP嵌套的foreach返回键两次
问题描述:
不是一个编码器,我试图做下面的事情,并放松我的想法试图做到这一点。我相信答案可能只是基本的,但我似乎无法找到答案。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
答
不是超级知道发生了什么与你的PHP版本(也许是你的对象,因为我没有使用那些),但我使用完全相同的代码和数组结构,并得到相同的结果。像deceze说的,确定你没有两次运行程序?该文件正在以附加模式使用,因此第二次运行不会覆盖第一次,而只是将它连接到它上面。
如果你没有运行两次,代码仍然给你错误,你可以使用替代代码来玩键。给这个镜头,功能应该是相同的,也许它会解决你的错误(如果上面没有):
$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);
}
}
}
+1
谢谢......看起来Nagios代码由于某种原因运行了两次。很高兴知道我对于代码的理解并没有疯狂和出去吃午饭! –
当然,你不只是运行代码两次,它写了两次日志? – deceze