PHP将配对值添加到数组,然后排序和打印

时间:2011-01-03 10:55:39

标签: php arrays iterator directory

假设我有一个文件的名称,它是两个变量的完整路径,如何将它们添加到数组中,按文件名对数组进行排序(保持两个值配对,然后遍历数组并打印出来?这是使用一个目录迭代器。我不会列出整个代码,因为它是非常令人费解的,所以这是我正在尝试做的简化版本:

<?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> //


}
?>

2 个答案:

答案 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);