сортировать многомерный массив с помощью array_multisort
У меня есть этот массив
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
)
.
.
.
}
Я хочу иметь возможность сортировать массивы в хэше по расстоянию.
Ответы
Ответ 1
Сначала вам нужно извлечь все расстояния, а затем передать как расстояние, так и данные в функцию. Как показано в примере 3 в документации array_multisort.
foreach ($data as $key => $row) {
$distance[$key] = $row['distance'];
}
array_multisort($distance, SORT_ASC, $data);
Это предполагает, что вы сначала хотите кратчайшие расстояния, иначе измените SORT_ASC
на SORT_DESC
Ответ 2
Если вы хотите избежать зацикливания, вы можете использовать функцию 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 содержит отсортированный массив по расстоянию distance
Ответ 3
Использование может использовать usort;
function cmpDistance($a, $b) {
return ($a['distance'] - $b['distance']);
}
usort($array, "cmpDistance");
Ответ 4
Этот код помогает отсортировать многомерный массив с помощью 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
имеет отсортированный список элементов.