За последние 24 часа нас посетили 22447 программистов и 1035 роботов. Сейчас ищут 610 программистов ...

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

Тема в разделе "Прочие вопросы по PHP", создана пользователем traum13, 10 окт 2020.

  1. traum13

    traum13 Новичок

    С нами с:
    10 окт 2020
    Сообщения:
    3
    Симпатии:
    0
    есть несколько диалогов пользователей, которые хранятся в массиве.
    PHP:
    1. $array = Array(
    2.                [0]=> Array( "dialog_id" => "1", "dialog_info" =>
    3.                               Array(
    4.                                    Array("date_sent" => "01.09.2016", "msg" => "txt1"),
    5.                                    Array("date_sent" => "31.08.2016", "msg" => "txt2"),
    6.                                    Array("date_sent" => "02.09.2016", "msg" => "txt3")
    7.                                    )
    8.                                ),
    9.                 [1]=> Array( "dialog_id" => "2", "dialog_info" =>
    10.                                 Array(
    11.                                      Array("date_sent" => "01.09.2018", "msg" => "txt4"),
    12.                                       Array("date_sent" => "31.08.2018", "msg" => "txt5"),
    13.                                       Array("date_sent" => "02.09.2018", "msg" => "txt6")
    14.                                       )
    15.                                ),
    16.                   // и тд...................
    17.                  );
    как отсортировать по максимальной дате элементы массива [0], [1], [2] и тд. ?
     
  2. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Преобразовать дату в другой формат.
     
  3. traum13

    traum13 Новичок

    С нами с:
    10 окт 2020
    Сообщения:
    3
    Симпатии:
    0
    @Drunkenmunky немного переделал код. так вроде пока работает
    PHP:
    1. //пересобрал массив
    2.  
    3. $array = Array(
    4.              [0]=>  Array(
    5.                            Array("dialog_id" => "1" , "date_sent" => "01.09.2016", "msg" => "txt1"),
    6.                            Array("dialog_id" => "1" , "date_sent" => "31.08.2016", "msg" => "txt2"),
    7.                            Array("dialog_id" => "1" ,  "date_sent" => "02.09.2016", "msg" => "txt3")
    8.                             ),
    9.             [1]=> Array(
    10.                         Array("dialog_id" => "2" , "date_sent" => "01.09.2018", "msg" => "txt4"),
    11.                         Array("dialog_id" => "2" , "date_sent" => "31.08.2018", "msg" => "txt5"),
    12.                         Array("dialog_id" => "2" , "date_sent" => "02.09.2018", "msg" => "txt6")
    13.                         ),
    14.                  // и тд...................
    15.                  );
    16.  
    17.  
    18.  
    19. //рабочая функция
    20. usort($array, function ( $a, $b ){
    21. $array_a = array_column($a, "date_sent");
    22. $array_b = array_column($b, "date_sent");
    23.  
    24. for ($j=0; $j < sizeof($array_a); $j++){
    25. $array_a[$j] = strtotime($array_a[$j]);
    26. }
    27. for ($j=0; $j < sizeof($array_b); $j++){
    28. $array_b[$j] = strtotime($array_b[$j]);
    29. }
    30. $date_a = max($array_a);
    31. $date_b = max($array_b);
    32.  
    33. if ($date_a == $date_b )
    34. {
    35. return 0;
    36. }
    37. return ($date_a > $date_b ) ? -1 : 1;
    38.  
    39. }
    40. );
    единственное, пришлось везде добавить "dialog_id". Возможно криво, но работаетo_O