сортировать многомерный массив с помощью array_multisort - PullRequest
11 голосов
/ 15 марта 2011

У меня есть этот массив

Array
(
    [0] => Array
        (
            [brand] => blah blah
            [location] => blah blah
            [address] => blah blah
            [city] => blah blah
            [state] => CA
            [zip] => 90210
            [country] => USA
            [phone] => 555-1212
            [long] => -111
            [lat] => 34
            [distance] => 3.08
        )
    [1] => Array
        (
            [brand] => blah blah
            [location] => blah blah
            [address] => blah blah
            [city] => blah blah
            [state] => CA
            [zip] => 90210
            [country] => USA
            [phone] => 555-1212
            [long] => -111
            [lat] => 34
            [distance] => 5
        )
.
.
.

}

Я хочу иметь возможность сортировать массивы в хэше по расстоянию.

Ответы [ 4 ]

22 голосов
/ 15 марта 2011

Сначала нужно извлечь все расстояния, а затем передать и расстояние, и данные в функцию. Как показано в примере 3 в документации array_multisort .

foreach ($data as $key => $row) {
    $distance[$key] = $row['distance'];
}

array_multisort($distance, SORT_ASC, $data);

Предполагается, что сначала вы хотите кратчайшие расстояния, в противном случае измените значение SORT_ASC на SORT_DESC

4 голосов
/ 17 января 2018

Если вы хотите избежать зацикливания, вы можете использовать функцию array_column для достижения вашей цели. Например,

Вы хотите отсортировать массив под расстоянием

$arr = array(0 => array('lat' => 34,'distance' => 332.08),1 => Array('lat' => 34,'distance' => 5),2 => Array('lat' => 34,'distance' => 34));

Используя одну строку ниже, ваш массив будет отсортирован по расстоянию

array_multisort(array_column($arr, 'distance'), SORT_ASC,SORT_NUMERIC,$arr);

Теперь $ arr содержит с отсортированный массив по расстоянию

2 голосов
/ 15 марта 2011

Использование можно использовать usort ;

function cmpDistance($a, $b) {
    return ($a['distance'] - $b['distance']);
}

usort($array, "cmpDistance");
0 голосов
/ 10 июня 2019

Этот код помогает сортировать многомерный массив с помощью array_multisort ()

  $param_dt = array();
  foreach ($data_set as $key => $row) {
     if(isset($row['params']['priority']))
     {
       $param_dt[$key] = $row['params']['priority'];
     }
     else
     {
        $param_dt[$key] = -2; // if priority key is not set for this array - it first out
     }
    }

  array_multisort($param_dt, SORT_ASC,SORT_NUMERIC, $data_set); 

Теперь $data_set имеет отсортированный список элементов.

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