dsfw2154 2011-10-04 16:52
浏览 76
已采纳

preg_split字符串到多维数组

Hello just looking for some help as I've gotten stuck

I have two Strings:

C:\Users\Bob\My Documents
/Users/Bob/Documents

That gets put through

preg_split('/(?<=[\/\\\])(?![\/\\\])/', $string)

that returns

Array
(
    [0] => C:\
    [1] => Users\
    [2] => Bob\
    [3] => My Documents
)

Array
(
    [0] => /
    [1] => Users/
    [2] => Bob/
    [3] => Documents
)

I need

Array
(
    [C:\] => Array
        (
            [Users] => Array
                (
                    [Bob] => Array
                        (
                            [My Documents] => array()
                        )

                )

        )

)

Array
(
    [/] => Array
        (
            [Users] => Array
                (
                    [Bob] => Array
                        (
                            [Documents] => array()
                        )

                )

        )

)

And ultimately merged to

Array
(
    [C:\] => Array
        (
            [Users] => Array
                (
                    [Bob] => Array
                        (
                            [My Documents] => array()
                        )

                )

        )
    [/] => Array
        (
            [Users] => Array
                (
                    [Bob] => Array
                        (
                            [Documents] => array()
                        )

                )

        )

)

(properly merged, not just appended, so if another string started with C:\Users\Dan Then dan would appear on the ?3rd? Dimension. array_merge_recursive() ? )

  • 写回答

2条回答 默认 最新

  • doujiao1905 2011-10-04 18:42
    关注

    Just take the arrays returned by preg_split() and build your tree structure out of them:

    $tree = array();
    foreach ( $strings as $string ) {
        $path = preg_split( '/(?<=[\/\\\])(?![\/\\\])/', $string );
        $ptr =& $tree;
        foreach ( $path as $elem ) {
            if ( ! array_key_exists( $elem, $ptr ) )
                $ptr[ $elem ] = array();
            $ptr =& $ptr[ $elem ];
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!