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


Returning folder structure in alphabetical order

我正在努力理解一些事情。我有以下函数

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