PHP добавляет парные значения в массив, затем сортирует и печатает - PullRequest
1 голос
/ 03 января 2011

Скажем, у меня есть имя файла и его полный путь в двух переменных, как я могу добавить их в массив, отсортировать массив по имени файла (сохранив два значения в паре, затем перебрать массив и распечатать его? Это использует итератор каталогов. Я не буду перечислять весь код, так как он довольно запутанный, поэтому вот упрощенная версия того, что я пытаюсь сделать:

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

1 голос
/ 03 января 2011

Я бы поддерживал каждую пару в простом классе. Тогда я бы использовал 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);
1 голос
/ 03 января 2011
$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
   }
}

РЕДАКТИРОВАТЬ: Обновлено благодаря предложению неуловимого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...