PHP - сортировка многомерного массива по отметке времени

1

Я пару раз пробовал просить здесь, я тоже видел этот вопрос

который похож на мой, но, к сожалению, он не работает (или я могу заставить его работать также).

У меня такой массив:

    Array (

  [user_1] => Array 
            (
              [0] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [1] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [2] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                )
            ),

  [user_2] => Array 
            (
              [0] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [1] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [2] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                )
            )
      )

И для каждого пользователя я должен сортировать массив 2-го уровня по метке времени.

Следовательно, я пробовал:

foreach ($array as $user => $user_data) {

    timestamps = array();

    foreach($user_data as $key => $actual_data) {
       $timestamps[$key] = $actual_data['time'];
    }
    array_multisort($timestamps, SORT_ASC, $user_data);
}

unset($timestamps);
print_r($array); // the original array should now be sorted by timestamp

Ну, сортировка не происходит, окончательный массив точно = исходный.

ПРИМЕЧАНИЯ:

  • ключ ['time'] в массив 2-го уровня поступает из столбца MYSQL и хранится как BIGINT. var_dump дает мне: int(1432587949), поэтому он не должен быть проблемой с переменным типом
  • Я также пробовал использовать, с тем же результатом: никакой сортировки.

Где я не прав? благодаря

Теги:
arrays
multidimensional-array
sorting

1 ответ

1
Лучший ответ

Вы хотите сделать что-то вроде этого:

array_walk($array, function(&$arr) {usort($arr, function($a,$b){return ($a["time"] < $b["time"]) ? -1 : ($a["time"] > $b["time"] ? 1 : 0);});});

Но так как вы сказали, что данные поступают из базы данных, я предлагаю вам сортировать их там, потому что это может быть быстрее, чем сортировка в php.

  • 0
    Спасибо за ваш ответ. Не могли бы вы переименовать $ data и $ arr в имена массивов моего примера? Спасибо
  • 0
    @sciakysystem: сделано, $arr - это просто имя внутреннего параметра.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню