微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个数组,可能是任何深度或数量的元素:

$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;
}

这里的关键是,你实际上在函数结束时返回到目前为止找到的值,但到目前为止,你还没有在脚本的调用部分中“捡起它们”.此版本不带任何静态变量.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐