За последние 24 часа нас посетили 22610 программистов и 1546 роботов. Сейчас ищут 887 программистов ...

сортировка по дате, по имени

Тема в разделе "PHP для новичков", создана пользователем zhenia3003, 6 авг 2014.

  1. zhenia3003

    zhenia3003 Активный пользователь

    С нами с:
    20 авг 2012
    Сообщения:
    184
    Симпатии:
    3
    здравствуйте, нужно отсортировать $filename по дате, либо от большего к меньшему по названию - имя $filename соответствует значению time().
    Сортировку которую я использую отлично подходит, если $filename находиться в одной папке, но у меня несколько папок ( glob("base/*) ), поэтому сортировка работает не корректно. Помогите отсортировать $filename из всех папок. Спасибо.
    Код (Text):
    1.  
    2. $Results = glob("base/*/*", GLOB_BRACE);
    3. natsort( $Results );
    4. $Results = array_reverse($Results);
    5. foreach ($Results as $filename) {
    6. require "$filename/title.txt";
    7. }
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Записываете в новый массив пары ключ-значение, где ключ - имя файла без пути, значение - имя файла с путем. И сортируете новый массив обычным образом.
    Проблемы будут, если у вас в разных папках есть файлы с одинаковыми именами.
     
  3. zhenia3003

    zhenia3003 Активный пользователь

    С нами с:
    20 авг 2012
    Сообщения:
    184
    Симпатии:
    3
    Я это понимаю, мне бы посмотреть код
     
  4. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, раз уж вы пишете не в разделы "РНР для новичков" и "Сделайте за меня", значит, обладаете некоторым опытом в РНР. Что для вас представляет сложность? Пройтись в цикле по массиву? Разбить строку на путь и имя файла? Применить функцию asort?

    Исправлено — тема теперь в "PHP для новичков" :)
    Модератор
     
  5. zhenia3003

    zhenia3003 Активный пользователь

    С нами с:
    20 авг 2012
    Сообщения:
    184
    Симпатии:
    3
    получилось вот что, только не понятно как объединить 1,2,3 ??
    Код (Text):
    1.  
    2. $me = array('1', '2', '3);
    3. foreach ($me as $ky){
    4. $name = scandir('base/'.$ky.'/');
    5. for($i=2; $i<=(sizeof($name)-1); $i++) {
    6. echo $name[$i]."<br>";
    7. }
    8. }
     
  6. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    В смысле - объединить? Собрать все файлы в один список? Используйте array_merge
     
  7. zhenia3003

    zhenia3003 Активный пользователь

    С нами с:
    20 авг 2012
    Сообщения:
    184
    Симпатии:
    3
    я так понял $prim = array_merge($me); asort($prim); - куда это все нужно подставить? нужно просканировать scandir все папки 1,2,3 и отсортировать то, что внутри
     
  8. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    В начале скрипта $all_names = array();
    А в цикле:
    $name = scandir('base/'.$ky.'/');
    $all_names = array_merge($all_names, $name);
     
  9. zhenia3003

    zhenia3003 Активный пользователь

    С нами с:
    20 авг 2012
    Сообщения:
    184
    Симпатии:
    3
    т.е. вот так?
    Код (Text):
    1.  
    2. $all_names = array();
    3. $all_names = array('1', '2', '3);
    4. foreach ($me as $ky){
    5. $name = scandir('base/'.$ky.'/');
    6. $all_names = array_merge($all_names, $name);
    7. for($i=2; $i<=(sizeof($all_names )-1); $i++) {
    8. echo $all_names [$i]."<br>";
    9. }
    10. }
    у меня не получилось. со вчера у меня получилось вывести данные таким образом:

    Код (Text):
    1.  
    2. $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('base/'.$cityname.'/'));
    3. while($it->valid()) {
    4. echo substr($it->getSubPath(),2) . "\n\n<br>";//substr
    5.  $it->next();
    6. }
    все получилось, НО почему то вывод повторяется несколько раз ->

    1407314397
    1407314397
    1407314397
    1407313996
    1407313996
    1407313996
    1407313892
    1407313892
    1407313892
    1407313892
    1407313874
    1407313874
    1407313874
    1407313915
    1407313915
    1407313915


    Как исправить? тут даже сортировать проще, по названию, но дубликаты мешают
     
  10. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5