获取数组每个元素的最后一个维度

道格·卡西迪(Doug Cassidy)

我有一个数组,可以是任意深度或元素数:

$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',
)

这是我做的一个递归函数。似乎有效。但是我不确定我是否做对了,就声明了静态变量,以及何时取消设置静态变量(以防我再次使用该函数,我不想要那个旧的静态数组)

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;
}
汽车10分钟

您的最新版本可能会正常工作。但是,如果您想摆脱static变量,也可以这样:

function getleaves($ra) {
    $out=array();
    foreach($ra as $r) {
        if(is_array($r)) {
            $out=array_merge($out,getleaves($r));
        }
        else {
            $out[] = $r;
        }
    }
    return $out;
}

这里的关键是,您实际上在函数末尾返回了找到的值,但是到目前为止,您还没有在脚本的调用部分中“拾取”它们。此版本可以在不使用任何静态变量的情况下工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章