假设我有一个文件的名称,它是两个变量的完整路径,如何将它们添加到数组中,按文件名对数组进行排序(保持两个值配对,然后遍历数组并打印出来?这是使用一个目录迭代器。我不会列出整个代码,因为它是非常令人费解的,所以这是我正在尝试做的简化版本:
<?php
$files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($pathToIterate));
foreach($files as $file){
$path=str_replace($_SERVER["DOCUMENT_ROOT"],'',$file->getPathname());
$file_name = basename($path,'.'.$info['extension']);
// Need code to add $file_name and $path to array //
};
}
// Need code to sort array by $file_name //
// Need code to loop through array and print <a href="$path">$file_name</a> //
}
?>
答案 0 :(得分:1)
$output = array();
foreach ($files as $file) {
$path = ... ;
$file_name = ... ;
$output[$file_name][] = $path;
}
ksort($output);
foreach ($output as $file_name => $path_names) {
sort($path_names); // if necessary
foreach ($path_names as $path) {
// print stuff
}
}
编辑:感谢难以捉摸的建议
答案 1 :(得分:1)
我会将每对保持在一个简单的类中。然后我会使用usort(),它允许您使用用户定义的比较函数对数组进行排序。
自从我编写任何PHP以来已经有一段时间了,所以我可能会对以下(未经测试的)示例代码感到尴尬,但您应该明白这一点:
class Pair
{
public $path;
public $name;
}
function myComparator($p1, $p2)
{
return strcmp($p1->name, $p2->name);
}
...
foreach ($files as $file)
{
...
$p = new Pair();
$p->path = $path;
$p->name = $name;
$pairs[] = $p;
}
usort($pairs, myComparator);