PHP递归重命名内部数组的键,仅针对内部数组。

5

我需要针对重命名内部子项键的具体方向,该子项的深度未知。原始数组是通过ID和父ID关系创建的父子多维数组。以下是一个数组示例:


$testArray = array (
    "name" => "Test name",
    "someValue1" => 834.69,
    "someMoreValue" => 33.4,
    "someCode" => 6668,
    "child" => array
        (
            array
                (
                    "name" => "Some name",
                    "someValue1" => 471.05,
                    "someMoreValue" => 18.84,
                    "someCode" => 7064,
                    "child" => array
                        (
                            array
                                (
                                    "name" => "Yet another name",
                                    "someValue1" => 438.62,
                                    "someMoreValue" => 17.56,
                                    "someCode" => 7065
                                ),
                            array
                                (
                                    "name" => "Da name",
                                    "someValue1" => 4444,
                                    "someMoreValue" => 44,
                                    "someCode" => 7044
                                )
                        )
                ),
                array
                    (
                        "name" => "name",
                        "someValue1" => 2222,
                        "someMoreValue" => 22,
                        "someCode" => 7022
                    )
        )
);

这是我的尝试,我只能重命名第一层子元素。

function keyprefix($keyprefix, $keyprefix2, Array $array) {
    foreach($array as $k=>$v){
        $array[$keyprefix.'-'.$k.'-'.$keyprefix2] = $v;
        unset($array[$k]);
    }
    return $array; 
}
function test($array) {
    $newArr = array();
    foreach ($array as $key => $value) {
        // $newArr[] = is_array($value) ? test($value) : $value;
        // $newArr[] = is_array($value) ? $array : array_merge( keyprefix("$name","Alt Danışman", $array[$key]) );
        $index = 0;
        $name = $array['name'];
        if (is_array($value)) {
            //if (is_array($value)) {
            //    test($value);
            //}
            $newArr[$key] = array_merge(
                keyprefix("$name","Under Child", $array[$key])
            );
        } 
        else {
            $newArr[$key] = $value;
        }
    }
    return $newArr;
}

echo highlight_string(var_export(test($testArray), true));

在此输入图像描述

我该如何解决这个问题?我觉得我离答案已经很近了,只需要一点指引就可以走上正确的道路。虽然我看过很多关于stack-overflow等的例子,但仍需要帮助。我知道递归不是我的强项。


你想将它们重命名为什么?基于深度、父级名称还是其他? - Nick
嘿@Nick,我添加了我的代码图片,你可以看到我根据它们各自的父名称重命名了它们,然后跟随一些文本。keyprefix实际上正在重命名提供的数组的所有键。 - Danish
仅重命名带有子键的数组还是重命名每个内部数组? - shingo
只有键名child具有内部数组 @shingo - Danish
1个回答

4
function TryRenameChildren(array $array)
{
    if(isset($array['child']))
    {
        $array['child'] = keyprefix($array['name'], 'prefix2', $array['child']);

        foreach($array['child'] as $key => $value)
            if(is_array($value))
                $array['child'][$key] = TryRenameChildren($value);
    }

    return $array;
}

$testArray = TryRenameChildren($testArray);

天啊!谢谢@shingo。我不明白,什么时候我才能深入理解递归。有时候我就是太菜了 :( - Danish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接