我正在尝试用键和值来计算数组中的“在线”一词。
function p($a){
function printAllVals($a, $val) {
if (!is_array($a)) {
if ($a == "online"){
$val+=1;
echo $val;
//echo $a <-- this prints online 5 times
}
return;
}
foreach($a as $k => $v) {
printAllVals($v, $val);
}
}
printAllVals($a, 0);
}
它在回显$a
时打印“在线”5次,但是当$ val打印“1”5次时。
看起来它在调用函数时采用$val
的原始值。我做错了什么?
$ a是数组,它类似于以下(多维):
prod:
cluster:
csddb:
inst_1: online
inst_2: online
oiddb:
inst1: online
inst2: offline
local:
quoid:
inst_1: offline
inst_2: offline
qaprod:
inst_1: offline
inst_2: offline
对不完整的问题感到抱歉。
答案 0 :(得分:0)
这是递归。因此,当递归回到先前状态时,它也会返回到先前的值,因此您将松散状态$val
;您必须返回$val
:
function printAllVals($a, $val) {
if (!is_array($a)) {
if ($a == "online"){
$val+=1;
echo $val;
// echo $a;
}
return $val;
}
foreach($a as $k => $v) {
$val = printAllVals($v, $val);
}
return $val;
}
printAllVals($a, 0);