preg_split 字符串到多维数组 [英] preg_split string to multidimensional array

查看:65
本文介绍了preg_split 字符串到多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我被卡住了,正在寻求帮助

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

我有两个字符串:

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

通过了

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

返回

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

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

我需要

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

                )

        )

)

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

                )

        )

)

并最终合并到

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

                )

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

                )

        )

)

(正确合并,而不只是附加,所以如果另一个字符串以 C:\Users\Dan 开头,那么 dan 将出现在 ?3rd? 维度上.array_merge_recursive() ? )

(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() ? )

推荐答案

只需使用 preg_split() 返回的数组并从中构建树结构即可:

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 ];
    }
}

这篇关于preg_split 字符串到多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆