Сортировка элементов массива


Как я мог бы отсортировать по "start_date" следующий массив:

Примечание: data является строкой типа string (json) , после преобразования ее в Array я должен отсортировать ее по этому полю ...

я могу сделать с PHP или Javascript, как бы то ни было, но важно отсортировать его ...

Большое спасибо ... я посылаю Вам массив:

Array
(
    [0] => Array
        (
            [Lunes] => Array
                (
                    [id] => 1
                    [start_date] => 09:30
                    [end_date] => 10:30
                    [text] => Texto de Ejemplo
                )
        )
    [1] => Array
        (
            [Lunes] => Array
                (
                    [id] => 2
                    [start_date] => 10:30
                    [end_date] => 11:30
                    [text] => Texto de Ejemplo
                )
        )
    [2] => Array
        (
            [Lunes] => Array
                (
                    [id] => 3
                    [start_date] => 08:30
                    [end_date] => 09:30
                    [text] => Texto de Ejemplo
                )
        )
)

Такие данные я получаю следующим образом:

function test(){

    $data = '[{"Lunes":{"id":1,"start_date":"10:30","end_date":"11:30","text":"Texto de Ejemplo"}},{"Miércoles":{"id":2,"start_date":"08:30","end_date":"09:30","text":"Texto de Ejemplo"}},{"Lunes":{"id":3,"start_date":"09:30","end_date":"10:30","text":"Texto de Ejemplo"}}]';

    $json = json_decode(
        $data,
        JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
    );

    return $json;
}
Author: BetaM, 2019-06-18

2 answers

Вы можете попробовать usort(). Вы можете найти документацию этого здесь.

Использование этого в вашем случае будет следующим:

<?php
    $datos = Array
    (
        Array(
                "Lunes" => Array
                    (
                        "id" => 1,
                        "start_date" => "09:30",
                        "end_date" => "10:30",
                        "text" => "Texto de Ejemplo"
                    )
            ),
        Array
            (
                "Lunes" => Array
                    (
                        "id" => 2,
                        "start_date" => "10:30",
                        "end_date" => "11:30",
                        "text" => "Texto de Ejemplo"
                    )
            ),
        Array
            (
                "Lunes" => Array
                    (
                        "id" => 3,
                        "start_date" => "08:30",
                        "end_date" => "09:30",
                        "text" => "Texto de Ejemplo"
                    )
            )
    );

    function cmp($a, $b)
    {
        if ($a["Lunes"]["start_date"] == $b["Lunes"]["start_date"]) {
            return 0;
        }
        return ($a["Lunes"]["start_date"] < $b["Lunes"]["start_date"]) ? -1 : 1;
    }

    echo "Datos sin ordenar:<br><br>";
    print_r($datos);
    echo "<br><br>Datos ordenados:<br><br>";
    usort($datos, "cmp");
    print_r($datos);

?>

Это приведет к:

Несортированные данные:

Array ( [0] => Array ( [Понедельник] => Array ( [id] => 1 [start_date] => 09:30 [end_date] => 10:30 [text] => Пример Текста ) ) 1 => Array ( [Понедельник] => Array ( [id] => 2 [start_date] => 10:30 [end_date] => 11 :30 [text] = > текст Пример)) [2] => Array ([Понедельник] = > Array ( [id] => 3 [start_date] => 08:30 [end_date] => 09:30 [text] => Текст Пример ) ) )

Упорядоченные данные:

Array ( [0] => Array ( [Понедельник] => Array ( [id] => 3 [start_date] => 08:30 [end_date] => 09:30 [text] => Пример Текста ) ) 1 => Array ( [Понедельник] => Array ( [id] => 1 [start_date] => 09:30 [end_date] => 10: 30 [text] = > пример текста)) [2] = > Array ( [понедельник] = > Array ( [id] = > 2 [start_date] => 10:30 [end_date] => 11:30 [text] => Текст Пример ) ) )

 0
Author: Samir Llorente, 2019-06-19 00:55:45

Отлично @samir все хорошо, сначала это не сработало для меня, но я не понимал, потому что в вашем примере, если при его реализации я понял, что должен использовать strtotime ().

function cmp($a, $b)
{
    if ($a["Sabado"]["start_date"] == $b["Sabado"]["start_date"]) {
        return 0;
    }
    return strtotime($a["Sabado"]["start_date"]) - strtotime($b["Sabado"]["start_date"]);
    //return ($a["Sabado"]["start_date"] < $b["Sabado"]["start_date"]) ? -1 : 1;
}

В день недели я не мог разместить его динамично, то, что я сделал, было функцией для каждого дня недели, это не очень элегантно, но если функционально.

Еще раз большое спасибо за помощь.

 0
Author: Juan Carlos Nava Morffe, 2019-06-20 15:14:39