За последние 24 часа нас посетили 17363 программиста и 1596 роботов. Сейчас ищет 951 программист ...

Модификация функции сортировки массива

Тема в разделе "Решения, алгоритмы", создана пользователем -=PAC-MAN=-, 7 авг 2014.

  1. -=PAC-MAN=-

    -=PAC-MAN=- Активный пользователь

    С нами с:
    15 май 2012
    Сообщения:
    16
    Симпатии:
    0
    Имеется многомерный массив, сортировка которого происходит с помощью функции:
    Код (PHP):
    1. function theme_subval_sort($a,$subkey, $order='asc',$natural = true) {
    2.     if (count($a) != 0 || (!empty($a))) { 
    3.         foreach($a as $k=>$v) {
    4.             if(isset($v[$subkey])) $b[$k] = lowercase($v[$subkey]);
    5.         }
    6.  
    7.         if(!isset($b)) return $a;
    8.  
    9.         if($natural){
    10.             natsort($b);
    11.             if($order=='desc') $b = array_reverse($b,true);    
    12.         } 
    13.         else {
    14.             ($order=='asc')asort($b) : arsort($b);
    15.         }
    16.         
    17.         foreach($b as $key=>$val) {
    18.             $c[] = $a[$key];
    19.         }
    20.  
    21.         return $c;
    22.     }
    23. }
    эта функцию я вызываю с помощью этого кода:
    Код (PHP):
    1. $theme_pagesSorted = theme_subval_sort($pagesArray,'pubDate','desc'); 
    но есть одна проблема, ключ "pubDate" является строкой (пример ее - "Tue, 08 Jul 2014 06:20:51 +0200"), а значит сортировка происходит неправильно. Выход из этой ситуации - использовать в алгоритме сортировки функцию strtotime(). Но вот куда вставлять эту функцию, мне не понятно. Помогите, пожалуйста, разобраться в этом коде
     
  2. Хыиуду

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

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Код (Text):
    1.         foreach($a as $k=>$v) {
    2.             if(isset($v[$subkey])) $b[$k] = ($subkey == 'pubDate' ? strtotime($v['pubDate']) : lowercase($v[$subkey]));
    3.            
    4.         }
     
  3. -=PAC-MAN=-

    -=PAC-MAN=- Активный пользователь

    С нами с:
    15 май 2012
    Сообщения:
    16
    Симпатии:
    0
    Да, спасибо, все работает. И судя по условию, то функция сортировки остается универсальной.