我正在努力理解一些事情。我有以下函数
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'));
输出可能像这样
array:2 [▼
"folder1" => array:1 [▼
2016 => array:4 [▼
"1" => array:1 [▶]
"2" => array:2 [▶]
"3" => array:4 [▶]
"4" => array:4 [▶]
]
]
]
这就是我困惑的地方。当我通过xampp在本地运行它时,结构将按字母顺序返回。这是意料之中的,因为当我在Windows中实际查看文件夹时,它会自动以这种方式显示。
然而,当我把它放在一个实时服务器上时,结构是相当随机的。最后得到这样的内容
array:2 [▼
"folder1" => array:1 [▼
2016 => array:4 [▼
"2" => array:1 [▶]
"4" => array:2 [▶]
"3" => array:4 [▶]
"1" => array:4 [▶]
]
]
]
这是否与实时服务器所在的操作系统有关,该操作系统基于linux ?我怎样才能一直按字母顺序排列呢?
谢谢
对于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);
这个简单的改变似乎起作用了
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