php递归键重命名仅用于内部数组

Posted

技术标签:

【中文标题】php递归键重命名仅用于内部数组【英文标题】:php recursive key renaming for inner arrays only 【发布时间】:2019-07-04 12:19:44 【问题描述】:

我在这里需要位方向来重命名内部深度未知的内部子键。原始数组是通过 id 和 parent_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));

关于如何解决这个问题的任何想法?我觉得我很接近,只需要在正确的道路上得到一点指导。我已经看到了许多堆栈溢出等示例,但需要一些帮助。我知道递归还不是我最好的技能。

【问题讨论】:

您还想将它们重命名为什么?基于深度的东西,或者父名,或者??? 嘿@Nick 我添加了我的代码图片,你可以看到我根据相应的父名称和一些文本重命名了它们。 keyprefix 实际上是重命名提供的数组的所有键 仅重命名带有关键子元素的数组还是重命名每个内部数组? 只有键名子有内部数组@shingo 【参考方案1】:
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);

【讨论】:

daymm!谢谢@shingo 我不明白,当我能够深入理解递归时。有时我只是很烂:(

以上是关于php递归键重命名仅用于内部数组的主要内容,如果未能解决你的问题,请参考以下文章

用于递归重命名文件夹的 Bash 脚本

华为电脑重命名快捷键是啥

powershell PowerShell文件,用于根据图像尺寸递归重命名和编辑目录中的图像。

重命名数组 PHP 中的键

递归地复制和重命名文件

重命名 PHP 数组键并维护元素数据