使用array_multisort对多维数组进行排序

dst*_*t11 12 php arrays sorting

我有这个数组

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
        )
.
.
.

}
Run Code Online (Sandbox Code Playgroud)

我希望能够按距离对哈希中的数组进行排序.

Jac*_*cob 22

您需要先提取所有距离,然后将距离和数据传递给函数.如array_multisort文档中的示例3所示.

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

array_multisort($distance, SORT_ASC, $data);
Run Code Online (Sandbox Code Playgroud)

这假设您首先需要最短距离,否则更改SORT_ASCSORT_DESC


小智 7

如果要避免循环,可以使用该array_column函数实现目标。例如,

您想使用距离排序在数组下面排序

$arr = array( 
  0 => array( 'lat' => 34, 'distance' => 332.08 ),
  1 => array( 'lat' => 34, 'distance' => 5 ),
  2 => array( 'lat' => 34, 'distance' => 34 )
);
Run Code Online (Sandbox Code Playgroud)

使用单行下方的数组将按距离排序

array_multisort( array_column( $arr, 'distance' ), SORT_ASC, SORT_NUMERIC, $arr );
Run Code Online (Sandbox Code Playgroud)

现在,$ arr包含距离排序的数组