我有这个数组
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
)
.
.
.
}
我希望能够按距离对哈希中的数组进行排序。
答案 0 :(得分:22)
您需要先提取所有距离,然后将距离和数据传递给函数。如array_multisort文档中的示例3所示。
foreach ($data as $key => $row) {
$distance[$key] = $row['distance'];
}
array_multisort($distance, SORT_ASC, $data);
这假设您希望首先获得最短距离,否则将SORT_ASC
更改为SORT_DESC
答案 1 :(得分:4)
如果要避免循环,可以使用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 :(得分:2)
使用可以使用usort;
function cmpDistance($a, $b) {
return ($a['distance'] - $b['distance']);
}
usort($array, "cmpDistance");
答案 3 :(得分:0)
此代码有助于使用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
具有排序的元素列表。
答案 4 :(得分:0)
我们有一个行数组,但是 array_multisort() 需要一个列数组,所以我们使用下面的代码来获取列,然后执行排序。
// as of PHP 5.5.0 you can use array_column() instead of the above code
$brand= array_column($data, 'brand');
$city= array_column($data, 'city');
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($brand, SORT_DESC, $city, SORT_ASC, $data);