我试图在一个键和值数组中计算单词"online"
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
时打印"online"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
很抱歉问题不完整
这是递归。所以当递归回到之前的状态时它也会回到之前的值所以你失去了$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);