doumu6997 2012-05-08 04:13
浏览 61
已采纳

将嵌套结构转换为平键值对

I have nested structure very similar to folder structure, like:

Array
(
    [level_one_1] => Array
        (
            [level_two_1] => value1
            [level_two_2] => valuetwo
            [level_two_3] => value_three
        )
    [level_one_2] => Array
        (
            [level_two_4] => value1
            [level_two_5] => valuetwo
            [level_two_6] => value_three
        )
    [level_one_3] => Array
        (
            [level_two_2] => valuetwo
            [level_two_3] => value_three
        )
)

Is it a quick way to covert it to something like this:

Array
(
    [level_one_1/level_two_1] => value1
    [level_one_1/level_two_2] => valuetwo
    [level_one_1/level_two_3] => value_three

    [level_one_2/level_two_4] => value1
    [level_one_2/level_two_5] => valuetwo
    [level_one_2/level_two_6] => value_three)

    [level_one_3/level_two_2] => valuetwo
    [level_one_3/level_two_3] => value_three
)

Slash between levels would be separator - it could anything. Also it would be dynamic numbers of levels.

Is it a way to do so by using predefined array* functions ? with recursion ?

  • 写回答

1条回答 默认 最新

  • douzhongju8780 2012-05-08 04:25
    关注

    Something like this. Untested, but should help you get started in the right direction:

    $myArray = array(
    'level_one_1' => array(
            'level_two_1' => 'value1',
            'level_two_2' => 'valuetwo',
            'level_two_3' => 'value_three'
    ),
    'level_one_2' => array(
            'level_two_4' => 'value1',
            'level_two_5' => 'valuetwo',
            'level_two_6' => 'value_three'
    ),
    'level_one_3' => array(
            'level_two_2' => 'valuetwo',
            'level_two_3' => 'value_three'
    ));
    $ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray));
    $result = array();
    foreach ($ritit as $leafValue) {
        $keys = array();
        foreach (range(0, $ritit->getDepth()) as $depth) {
            $keys[] = $ritit->getSubIterator($depth)->key();
        }
        $result[ join('/', $keys) ] = $leafValue;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 被蓝屏搞吐了,有偿求帮解答,Ai回复直接拉黑
  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并