1

こんにちは、行き詰まったので助けを探しています

私は2つの文字列を持っています:

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

                )

        )

)

(単に追加されるのではなく、適切にマージされるため、Thenで始まる別の文字列の場合、C:\Users\Dandanは?3番目の?次元に表示されます。array_merge_recursive()?)

4

2 に答える 2

1

によって返された配列を取得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 ];
    }
}
于 2011-10-04T18:42:57.637 に答える
0

pathinfo()を使用するのがおそらく最善です

http://uk.php.net/manual/en/function.pathinfo.php

そしてrealpath() http://uk.php.net/manual/en/function.realpath.php

* nixディレクトリをWindowsディレクトリにマップしようとしていると思いますか?

于 2011-10-04T17:49:50.077 に答える