PHP安排路径

时间:2015-12-04 09:16:29

标签: php arrays multidimensional-array path

排列路径数组:

$paths = array(
                "C:\test1\file1.txt",
                "C:\test1\file2.txt",
                "C:\test2\test1\file15.txt",
                "C:\test1\file4.txt"
            );

PHP代码返回数据 - 如果可能的话,作为数组多维

You have 2 folders [count array of folders]
In folder 1 you have 3 files [count array of files]
In folder 2 you have 1 files [count array of files]

[C:\test1\] =>  file1.txt,file2.txt,file4.txt
[C:\test2\test1\] =>  file15.txt

2 个答案:

答案 0 :(得分:0)

函数cut_string_using_last来自http://php.net/manual/en/function.strrchr.php

function cut_string_using_last($character, $string, $side, $keep_character=true) {
        $offset = ($keep_character ? 1 : 0);
        $whole_length = strlen($string);
        $right_length = (strlen(strrchr($string, $character)) - 1);
        $left_length = ($whole_length - $right_length - 1);
        switch($side) {
            case 'left':
                $piece = substr($string, 0, ($left_length + $offset));
                break;
            case 'right':
                $start = (0 - ($right_length + $offset));
                $piece = substr($string, $start);
                break;
            default:
                $piece = false;
                break;
        }
        return($piece);
    }

$Arrange = array();
$paths = array("C:\\test1\\file1.txt", "C:\\test1\\file2.txt", "C:\\test2\\test1\\file15.txt", "C:\\test1\\file4.txt");
foreach ($paths as $path) {
    $pathWithoutFileName = $db->cut_string_using_last('\\', $path, 'left', true);
    $fileName = $db->cut_string_using_last('\\', $path, 'right', false);

    if (array_key_exists($pathWithoutFileName, $Arrange)) {
        array_push($Arrange[$pathWithoutFileName], $fileName);
    } else $Arrange[$pathWithoutFileName] = array($fileName);
}
print_r($Arrange); // Array ( [C:\test1\] => Array ( [0] => file1.txt [1] => file2.txt [2] => file4.txt ) [C:\test2\test1\] => Array ( [0] => file15.txt ) ) 

答案 1 :(得分:0)

function getMergePaths($pathArray){
    $result = [];
    foreach($pathArray as $path){
        $basepath = dirname($path);
        $basename = basename($path);
        if(isset($result[$basepath])){
            $result[$basepath] .= ','.$basename;
        }else{
            $result[$basepath] = $basename;
        }
    }
    return $result;
}