Php preg_将字符串拆分为多维数组

Php preg_将字符串拆分为多维数组,php,multidimensional-array,preg-split,Php,Multidimensional Array,Preg Split,你好,我被卡住了,只是想寻求帮助 我有两条线: C:\Users\Bob\My Documents /Users/Bob/Documents 那就接通了 preg_split('/(?<=[\/\\\])(?![\/\\\])/', $string) 我需要 Array ( [C:\] => Array ( [Users] => Array ( [Bob]

你好,我被卡住了,只是想寻求帮助

我有两条线:

C:\Users\Bob\My Documents
/Users/Bob/Documents
那就接通了

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

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将出现在第三维上。
array\u merge\u recursive()
?)

您最好只使用pathinfo()

和realpath()


我假设您正在尝试将*nix目录映射到Windows目录?

您最好只使用pathinfo()

和realpath()


我假设您正在尝试将*nix目录映射到Windows one?

只需获取由
preg\u split()
返回的数组,并用它们构建树结构:

$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 ];
    }
}
$tree=array();
foreach($strings作为$string){

$path=preg_split('/(?只需获取
preg_split()
返回的数组,并用它们构建树结构:

$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 ];
    }
}
$tree=array();
foreach($strings作为$string){

$path=preg_split('/(?有什么必要有这种奇怪的结构?从一条路径开始,有一个数组的数组的数组…为什么你需要这种结果?下一步是什么?说真的,我不认为这是一种使用数组的好方法。这在我自己的头脑中是有意义的。当你沿着一条路径走的时候,你会更深地进入文件夹结构。为什么不更深一点呢进入数组系列?在这种情况下,数组就像一个文件夹,可以包含更多的文件夹,也可以包含文件夹。有什么必要有这种奇怪的结构?从一个路径开始,有一个数组数组数组数组数组…为什么需要这样的结果?下一步是什么?说真的,我不认为这是正确的使用数组的一个好方法在我自己看来很有意义。当你沿着一条路径前进时,你会深入到文件夹结构中去。为什么不深入到数组系列中去呢?在这种情况下,数组就像一个文件夹,可以包含更多的文件夹,或者旁边的文件夹也可以包含文件夹。不,*nix示例只是为了证明f正则表达式的正斜杠部分和保留初始
/
的重要性不*nix示例只是为了证明正则表达式的正斜杠部分和保留初始
/
的重要性,讽刺的是,我自己使用引用的树提出了一个非常类似的解决方案。虽然没有使用
数组\u键_存在
所以您对它做了一点改进:)讽刺的是,我自己刚刚使用引用的树提出了一个非常类似的解决方案。虽然没有使用
数组\u key\u exists
所以您对它做了一点改进:)