按PHP中子数组的值对数组进行排序

Eva*_*van 15 php arrays sorting

我有一个由数组组成的数组.我想通过子数组的属性对父数组进行排序.这是一个例子

array(2){
    [0]=> array(3){
        [0]=> string(6) "105945"
        [1]=> string(10) "First name"
        [2]=> float(0.080878465391)
    }
    [1]=> array(3) {
        [0]=> string(6) "109145"
        [1]=> string(11) "Second name"
        [2]=> float(0.0504154818384)
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在子数组中按[2]升序对父数组进行排序,因此在这种情况下,结果将是子数组反转(.05,08).这是否可以使用众多PHP排序函数中的任何一种?

cod*_*ict 28

您可以使用usort函数:

$arr = array(
                array("105945","First name",0.080878465391),
                array("109145","Second name",0.0504154818384)
            );

function cmp($a, $b) {
        if ($a[2] == $b[2]) {
                return 0;
        }
        return ($a[2] < $b[2]) ? -1 : 1;
}

usort($arr,"cmp");
Run Code Online (Sandbox Code Playgroud)


HKa*_*lla 10

从 PHP >= 7.0 开始,您可以将 usort 与 spaceship 运算符结合使用

usort($arr, function ($a, $b) {
        return $a[2] <=> $b[2];
    });
Run Code Online (Sandbox Code Playgroud)

见:http : //php.net/manual/de/migration70.new-features.php


dud*_*511 5

对于类似数据库的模式,请使用array_multisort如示例 #3 所示。

例如:

$sort = array();
foreach ($data as $key => $row) {
  $sort[$key]  = $row['basis'];
}
array_multisort($sort, SORT_ASC, $data);
Run Code Online (Sandbox Code Playgroud)

$data你的数据数组在哪里,是basis用于排序的元素。