Усортировать в Opencart

Я пытаюсь заказать такой массив в моем opencart 3.0.2:

array(4) { 
[0]=> array(3) 
    { 
       ["name"]=> string(5) "Name1" 
       ["download_id"]=> int(1) 
       ["event_date"]=> string(10) "05/05/2018" 
    } 
[1]=> array(3) 
    { 
       ["name"]=> string(5) "Name2" 
       ["download_id"]=> int(2) 
       ["event_date"]=> string(10) "05/06/2018" 
    } 
[2]=> array(3) 
    { 
       ["name"]=> string(5) "Name3" 
       ["download_id"]=> int(3) 
       ["event_date"]=> string(10) "01/05/2018" 
    } 
[3]=> array(3) 
    { 
       ["name"]=> string(5) "Name4" 
       ["download_id"]=> int(4) 
       ["event_date"]=> string(10) "02/05/2018" 
    } 
}

Я использую USORT, чтобы упорядочить этот массив следующим образом:

usort($download_teste['teste'], "sortByDate")

Моя функция SortByDate такова:

function sortByDate($a, $b) {
   $first = $this->formatDateDownloadForTest($a['event_date']);
   $second = $this->formatDateDownloadForTest($b['event_date']);

   if ($first == $second) {
     return 0;
   }

   return ($first < $second) ? -1 : 1;
}

Также я использую эту функцию formatDateDownloadForTest, чтобы получить дату и преобразовать исходную дату, например d/m/Y, в Ymd в строке, чтобы дата 05/05/2018 стала 20180505, чтобы сравнить их и вернуть правильно. Эту функцию я протестировал, и все в порядке!

function formatDateDownloadForTest($date){
   $insertedDate = explode("/", $date);
   $insertedDate = $insertedDate[2].$insertedDate[1].$insertedDate[0];

   return $insertedDate;
}

По какой-то причине это не работает, я хочу знать, что я здесь делаю неправильно, потому что это никак не меняет порядок массива.

Спасибо за ваше время! Бика


person Matheus Bica    schedule 06.05.2018    source источник


Ответы (1)


Я обнаружил, в чем проблема:

usort($download_teste['teste'], array($this, "sortByDate"));

Используя usort таким образом, передавая ссылку на функцию, она работает. Таким образом, в основном это не поиск функции, которую должен использовать usort.

также изменил мою функцию sortByDate на это:

function sortByDate($a, $b) {
        $first = $this->formatDateDownloadForTest($a['event_date']);
        $second = $this->formatDateDownloadForTest($b['event_date']);

        return ($first - $second);
    }

Спасибо, Бика.

person Matheus Bica    schedule 07.05.2018