$ra['a'] = 'one';
$ra['b']['two'] = 'b2';
$ra['c']['two']['three'] = 'c23';
$ra['c']['two']['four'] = 'c24';
$ra['c']['five']['a'] = 'c5a';
我想要一个字符串数组,如下所示:
array (
0 => 'one',
1 => 'b2',
2 => 'c23',
3 => 'c24',
4 => 'c5a',
)
这是我做的递归函数.它似乎工作.但我不确定我做得对,就声明静态而言,以及何时取消设置静态var(如果我想再次使用该函数,我不想要那个旧的静态数组)
function lastthinggetter($ra){
static $out;
foreach($ra as $r){
if(is_array($r))
lastthinggetter($r);
else
$out[] = $r;
}
return $out;
}
我如何确保每次调用该函数时,$out var每次都是新鲜的?有没有更好的方法呢?
也许检查我们是否在递归?
function lastthinggetter($ra, $recurse=false){
static $out;
foreach($ra as $r){
if(is_array($r))
lastthinggetter($r, true);
else
$out[] = $r;
}
$tmp = $out;
if(!$recurse)
unset($out);
return $tmp;
}
解决方法:
您的上一个版本可能会正常工作.但是,如果你想摆脱静态变量,你也可以这样做:
function getleaves($ra) {
$out=array();
foreach($ra as $r) {
if(is_array($r)) {
$out=array_merge($out,getleaves($r));
}
else {
$out[] = $r;
}
}
return $out;
}
这里的关键是,你实际上在函数结束时返回到目前为止找到的值,但到目前为止,你还没有在脚本的调用部分中“捡起它们”.此版本不带任何静态变量.