Несколько заметок:
Чтобы использовать любую функцию массива для данных json_decode()
ed, вы должны передать true
в качестве второго параметра, который дает вам ассоциативный массив вместо объекта.
Всякий раз, когда вы планируете сортировать массив, посмотрите на эту страницу , которая поможет вам решить, какую из 12+ функций сортировки массива вы должны использовать.
Поскольку желаемая сортировка не является интуитивно понятной (сортировка по ключу ставит пятницу сверху и закрывается перед открытием), вам следует определить пользовательскую функцию сортировки; используйте uksort()
, что позволяет вам делать это только с ключами массива:
<?php
$data = json_decode('{"hours": {
"mon_1_open": 406800,
"mon_1_close": 437400,
"tue_1_open": 493200,
"tue_1_close": 523800,
"wed_1_open": 579600,
"wed_1_close": 590400,
"thu_1_open": 61200,
"thu_1_close": 91800,
"fri_1_open": 147600,
"fri_1_close": 178200,
"sat_1_open": 237600,
"sat_1_close": 264600,
"sun_1_open": 324000,
"sun_1_close": 345600,
"wed_2_open": 597600,
"wed_2_close": 619200
}}', true);
echo 'BEFORE ================================' . PHP_EOL;
print_r($data);
uksort($data['hours'], 'customsort');
echo 'AFTER ================================' . PHP_EOL;
print_r($data);
function customsort($a, $b) {
$tr_prefix = array(
'mon' => 1,
'tue' => 2,
'wed' => 3,
'thu' => 4,
'fri' => 5,
'sat' => 6,
'sun' => 7
);
$tr_suffix = array(
'open' => 1,
'close' => 2
);
$a = strtr(strtr($a, $tr_prefix), $tr_suffix);
$b = strtr(strtr($b, $tr_prefix), $tr_suffix);
return strcmp($a, $b);
}
Примечание: моя реализация customsort
, показанная выше, является наивной. Импровизируйте при необходимости.