按第三列中的值按降序对二维数组的行进行排序

问题描述 投票:0回答:3

我有一个二维数组,其中的行包含 ID 号、名称字符串以及名称出现的次数。

我想按计数值降序对数组进行排序。

样本阵列:

[
    [1, 'Al', 3],
    [2, 'Bea', 2],
    [3, 'Chan', 1], 
    [4, 'Doug', 2],
    [5, 'Ed', 3],
    [6, 'Fey', 1],
]

想要的结果:

[
    [1, 'Al', 3],
    [5, 'Ed', 3],
    [2, 'Bea', 2], 
    [4, 'Doug', 2],
    [3, 'Chan', 1],
    [6, 'Fey', 1],
]

sort()
ksort()
没有执行我的要求。

php arrays sorting multidimensional-array custom-sort
3个回答
2
投票

使用 uasort() 通过回调函数进行排序。示例:

function sort_callback($a, $b) {
    if ($a[2] == $b[2]) {
        return 0;
    }

    return ($a[2] < $b[2]) ? -1 : 1;
}

uasort($array1, 'sort_callback');

1
投票

我对你提出问题的方式感到有点困惑,但是你正在尝试做这样的事情吗?

function order_by($data, $field_name) {

    $code = "return strnatcmp(\$a['$field_name'], \$b['$field_name']);";
    usort($data, create_function('$a,$b', $code));
    return $data;

}

所以,例如:

$array1 = array();
$array1[] = array('Id' => 1, 'Name' => 'YT', 'Count' => 30);
$array1[] = array('Id' => 2, 'Name' => 'Da5id', 'Count' => 56);
$array1[] = array('Id' => 3, 'Name' => 'Fido', 'Count' => 12);
$array1[] = array('Id' => 4, 'Name' => 'Hiro', 'Count' => 45);

echo "<pre>";
print_r($array1);
echo "</pre>";

$array2 = order_by($array1, 'Count');

echo "<pre>";
print_r($array2);
echo "</pre>";

0
投票

按特定列对二维数组的行进行排序的现代方法是将

usort()
与 spaceship 运算符一起使用。对于 DESC 排序,请在
$b
的左侧写入
<=>
数据,在
$a
的右侧写入
<=>

代码:(演示

usort($array, fn($a, $b) => $b[2] <=> $a[2]);
var_export($array);
© www.soinside.com 2019 - 2024. All rights reserved.