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

PHP – 递归替换数组键并将值更改为包括旧键的数组

我花了一段时间试图从旧的答案得到我需要的东西,但还没有得到它(尽管已经接近了!).

我有这个;

[January] => Array
    (
        [Tuesday] => Array
            (
                [foo] => Array
                    (
                        [82] => 47731
                        [125] => 19894
                    )

                [bar] => Array
                    (
                        [82] => 29911
                        [125] => 10686
                    )

            )

    }

……我想要这个;

[0] => Array
    (
       'key' => 'January'
       'children' => Array
            [0] => Array 
                {
                    'key' => 'Tuesday'
                    'children' => Array 
                         [0] => Array 
                              {
                                  'key' => 'foo'
                                  'values' => Array
                                        {
                                             [82] => 47731
                                             [125] => 19894
                                        }
                         [1] => Array
                              {
                                  'key' => 'bar'
                                  'values' => Array
                                        {
                                             [82] => 29911
                                             [125] => 10686
                                        }
                              }
                )
    }

我通过调整Recursively change keys in array的第一个答案得到了相当接近,但只有我的结果的底层是正确的 – 带有’Tuesday’,’foo’和’bar’键的节点看起来与源数组中的相同.

这是我到目前为止所得到的;

public function transform_hierarchical_output(&$var)
{       
    if (is_array($var)) 
    {
        $final = [];

        $i = 0;

        foreach ($var as $k => &$v) 
        {
            $new_node = [
                'key'       => $k,
                'children'  => $v
            ];

            $k = $i;

            $this->transform_hierarchical_output($v);

            $final[$k] = $new_node;

            $i++;
        }

        $var = $final;
    } 
    elseif (is_string($var)) 
    {

    }
}

这需要使用任何长度和深度的源数组.

提前致谢.

杰夫

解决方法:

尝试以下:

function t($arr)
    {

        $a = [];

        $num = 0;
        foreach($arr as $k => $v) {
            if (is_array($v))
            {
                $a[$num] = [
                    'key' => $k,
                ];
                $a[$num][is_array(array_values($v)[0]) ? 'children' : 'values'] = t($v);
                $num ++;
            } else {
                $a[$k] = $v;
            }
        }
        return $a;
    }

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

相关推荐