PHP сортирует многомерный массив по нескольким значениям - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть следующий многомерный массив PHP, который должен быть отсортирован / сгруппирован определенным образом: каждый дочерний массив должен быть сгруппирован по имени, а дочерний массив, где заполнен "nr", должен быть сверху. Я попробовал array_multisort и usort, но не смог заставить его работать идеально. После группировки / сортировки в этом примере необходимо поменять местами только индексы 0 и 1.

Array (
 [0] => Array( "name" => "Test",
               "address" => "test address",
               "nr" =>
       ),
 [1] => Array( "name" => "Test",
               "address" => "test address",
               "nr" => 100
       ),
 [2] => Array( "name" => "Test1",
               "address" => "test1 address",
               "nr" => 180
       ),
 [3] => Array( "name" => "Test2",
               "address" => "test2 address",
               "nr" => 250
       )
)

Мультисортировка массива: array_multisort(array_column($arr, 'name'), SORT_ASC, array_column($arr, 'deb_nr'), SORT_ASC, $arr);

Мультисортировка массива с функцией обратного вызова:

$arr = $this->arrayOrderBy($arr, 'name', SORT_ASC, 'nr', SORT_ASC);

private function arrayOrderBy()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
        }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...