首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取嵌套关联数组中所有元素的路径和值

获取嵌套关联数组中所有元素的路径和值
EN

Stack Overflow用户
提问于 2013-06-19 15:00:30
回答 2查看 2.2K关注 0票数 2

考虑任意形式的关联数组和嵌套深度,例如:

代码语言:javascript
复制
$someVar = array(
    'name'      => 'Dotan',
    'age'       => 35,
    'children'  => array(
        0 => array(
            'name'  => 'Meirav',
            'age'   => 6,
        ),
        1 => array(
            'name'  => 'Maayan',
            'age'   => 4,
        )
    ),
    'dogs' => array('Gili', 'Gipsy')
);

我想将其转换为路径和值的关联数组:

代码语言:javascript
复制
$someVar = array(
    'name'            => 'Dotan',
    'age'             => 35,
    'children/0/name' => 'Meirav',
    'children/0/age'  => 6,
    'children/1/name' => 'Maayan',
    'children/1/age'  => 4,
    'dogs/0'          => 'Gili',
    'dogs/1'          => 'Gipsy'
);

我开始编写一个递归函数,用于数组元素将递归,而对于非数组元素(int、floats、bools和string)返回数组$return['path']$return['value']。这很快就变得草率了!是否有更好的方法在PHP中实现?--我假设数组中不会传递可调用对象和对象,尽管处理这种可能性的任何解决方案都是最好的。另外,我假设输入数组不会在元素名中包含/字符,但是考虑到这一点可能是谨慎的!注意到输入数组可以嵌套到深度达8个或更深的层次!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 15:20:18

递归实际上是您能够处理此问题的唯一方法,但下面是一个简单的版本:

代码语言:javascript
复制
function nested_values($array, $path=""){
    $output = array();
    foreach($array as $key => $value) {
        if(is_array($value)) {
            $output = array_merge($output, nested_values($value, (!empty($path)) ? $path.$key."/" : $key."/"));
        }
        else $output[$path.$key] = $value;
    }
    return $output;
}
票数 4
EN

Stack Overflow用户

发布于 2013-06-19 15:20:14

代码语言:javascript
复制
function getRecursive($path, $node) {
    if (is_array($node)) {
        $ret = '';
        foreach($node as $key => $val)
            $ret .= getRecursive($path.'.'.$key, $val);
        return $ret;
    }
    return $path.' => '.$node."\n";
}
$r = getRecursive('', $someVar);
print_r($r);

把它放在一个数组里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17194649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档