按字母顺序返回文件夹结构

时间:2016-08-07 15:18:27

标签: php directory

我想了解一些事情。我有以下功能

dispatch_async(dispatch_get_main_queue()) { 
    NSApp.activateIgnoringOtherApps(true)
}

我基本上将它传递给根路径并在其中创建一个具有目录结构的数组。

function fillArrayWithFileNodes( DirectoryIterator $dir )
{
    $data = array();
    foreach ( $dir as $node )
    {
        if ( $node->isDir() && !$node->isDot()  )
        {
            $data[$node->getFilename()] = $this->fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) );
        }
        else if ( $node->isFile() )
        {
            $data[] = $node->getFilename();
        }
    }
    return $data;
}

输出可能是这样的

$fileData = $this->fillArrayWithFileNodes(new DirectoryIterator( public_path(). '/images'));

这让我很困惑。当我通过xampp在本地运行时,结构按字母顺序返回。这是可以预料到的,因为当我实际在Windows中查看该文件夹时,它会自动以这种方式显示。

但是,当我把它放在实时服务器上时,结构非常随机。我最终得到了类似的东西

array:2 [▼
  "folder1" => array:1 [▼
    2016 => array:4 [▼
      "1" => array:1 [▶]
      "2" => array:2 [▶]
      "3" => array:4 [▶]
      "4" => array:4 [▶]
    ]
  ]
] 

这是与实时服务器所在的操作系统有关,这是基于Linux的吗?我如何能一直按字母顺序排列?

由于

2 个答案:

答案 0 :(得分:1)

对于ksort解决方案,您可以执行类似的操作(可能有更简单和更短的内容):

$fileData = array(
    "folder1" => array(
        "4" => array(
            "test"
        ),
        "2" => array(
            "test"
        ),
        "3" => array(
            "test"
        ),
        "1" => array(
            "test"
        ),
        "5" => array(
            "test"
        ),
    )
);

function sortYourArray($arr) {
    ksort($arr);

    foreach ($arr as $k => $v) {
        if (is_array($v)) {
            $arr[$k] = sortYourArray($v);
        }
    }

    return $arr;
}

$sortedArray = sortYourArray($fileData);

print_r($sortedArray);

答案 1 :(得分:1)

这个简单的改变似乎有效

function fillArrayWithFileNodes( DirectoryIterator $dir )
{
    $data = array();
    foreach ( $dir as $node )
    {
        if ( $node->isDir() && !$node->isDot() ) {
            $data[$node->getFilename()] = $this->fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) );
        } else if ( $node->isFile() ) {
            $data[] = $node->getFilename();
        }
    }
    sort($data);
    return $data;
}
  

您可能需要摆弄sort()参数以获得您想要的http://php.net/manual/en/function.sort.php