Сортировать массив по дате - PullRequest
0 голосов
/ 27 марта 2019

В моем массиве есть массив для каждого поля (например, дата, имя и т. Д.). Как отсортировать массив по дате? Должен ли я создать еще один массив? Могу ли я использовать сортировку или несортировку здесь. Если да, то как? Вот мой массив:

Array
(
    [date] => Array
        (
            [0] => 03/11/2019
            [1] => 03/19/2019
            [2] => 03/15/2019
            [3] => 12/15/2018
        )

    [name] => Array
        (
            [0] => Lowa
            [1] => Stephanie
            [2] => Allan
            [3] => Joffer
        )

    [number] => Array
        (
            [0] => 178989898
            [1] => 111111111
            [2] => 222222222
            [3] => 333333333
        )

    [unit] => Array
        (
            [0] => HR
            [1] => VPP
            [2] => 
            [3] => OAT
        )

    [department] => Array
        (
            [0] => Chemistry
            [1] => IT
            [2] => Lab
            [3] => Contractor
        )

) 

В конце мой первый элемент будет: 03/19/2019 Stephanie 111111111 VPP IT

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Я думаю, что ваши данные могут быть лучше организованы:

$newArr = Array
(
    [0] => Array
        (
            [date] => 03/11/2019
            [name] => Lowa
            [number] => 178989898
            [unit] => HR
            [department] => Chemistry
        )

    [1] => Array
        (
            [date] => 03/19/2019
            [name] => Stephanie
            [number] => 111111111
            [unit] => VPP
            [department] => IT
        )

    [2] => Array
        (
            [date] => 03/15/2019
            [name] => Allan
            [number] => 222222222
            [unit] =>
            [department] => Lab
        )

    [3] => Array
        (
            [date] => 12/15/2018
            [name] => Joffer
            [number] => 333333333
            [unit] => OAT
            [department] => Contractor
        )
);

Затем вы можете просто отсортировать их по:

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

usort($newArr, "cmp");

Обратите внимание, что даты в формате "Месяц /День / Год "не сортируются по алфавиту.
Вам определенно следует использовать формат Год / Месяц / День для дат или написать более конкретную функцию cmp() ...

ОБНОВЛЕНИЕ : Чтобы ответить на вопрос ОП в комментарии: просто поменяйте местами $ row и порядок полей:

for ($row = 0; $row < count($date); $row++) {
  $newArr[$row]['date'] = $date[$row];
  $newArr[$row]['name'] = $name[$row];
  ...
}
1 голос
/ 27 марта 2019

Сначала сохраните ключи вашего массива - затем с помощью array_value преобразуйте в целочисленные ключи, чтобы вы могли использовать оператор ....

Затем вы можете использовать array_filter с функцией null дляреорганизовать свой массив.Следующим шагом будет возврат ключей с помощью array_map и array_combine.

Последний шаг - сортировка по «данным» с помощью usort

Рассмотрим следующий пример:

$arr = ["date" => ["3", "7", "5"], "name" => ["aa", "bb", "cc"]]; // this can have a lot more sub-array inside
$keys = array_keys($arr); // extract the keys for later use
$res = array_map(null, ...array_values($arr)); // transposed the array
$res = array_map(function ($e) use ($keys) {return array_combine($keys, $e);}, $res); // return the keys to the transposed array
usort($res, function ($a, $b) {return strcmp($a['date'], $b['date']);} ); // sort all by "date"

Ссылка:

ключи массива , фильтр массива , карта массива , usort , значения массива

Уведомление @MarcoS опубликовать комментарий относительно сравнения дат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...