php 按第一列对二维数组(列名不一致)排序

ctzwtxfj  于 2023-04-28  发布在  PHP
关注(0)|答案(3)|浏览(130)

如何按每行的第一个值对数组或行进行排序?

$array = [
    ['item1' => 80],
    ['item2' => 25],
    ['item3' => 85],
];

所需输出:

[
    ['item2' => 25],
    ['item1' => 80],
    ['item3' => 85],
]
ryoqjall

ryoqjall1#

您需要使用usort,这是一个通过用户定义函数对数组进行排序的函数。类似于:

usort(
    $yourArray, 
    fn(array $a, array $b): int /* (1),(2) range: -1 ... 1 */
    => reset($a) /* get the first array elements from $a */ 
       <=>  /* (3) <--- the spaceship operator */
       reset($b) /* and from $b for comparison */
);
  1. fn (...) => ...箭头函数(PHP 7.(四)
  2. function name (): int返回类型声明(PHP 7.0)
  3. <=> Spaceship Operator(PHP 7.0)

用旧的PHP表示:

function cmp($a, $b)
{
    $a = reset($a); // get the first array elements
    $b = reset($b); // for comparison.
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

usort($yourArray, "cmp")

把这个和重复的问题的答案进行比较。

kknvjkwl

kknvjkwl2#

您需要使用usort

$array = array (
  0 =>
  array (
    'item1' => 80,
  ),
  1 =>
  array (
    'item2' => 25,
  ),
  2 =>
  array (
    'item3' => 85,
  ),
);

function my_sort_cmp($a, $b) {
    reset($a);
    reset($b);
    return current($a) < current($b) ? -1 : 1;
}

usort($array, 'my_sort_cmp');

print_r($array);

输出:

(
    [0] => Array
        (
            [item2] => 25
        )

    [1] => Array
        (
            [item1] => 80
        )

    [2] => Array
        (
            [item3] => 85
        )

)
busg9geu

busg9geu3#

在现代PHP中,使用语法上很好的箭头函数和飞船操作符调用usort()。使用current()reset()访问每行的第一个元素。
代码:(Demo

usort($array, fn($a, $b) => current($a) <=> current($b));

总函数调用数较少的等效函数:(Demo

array_multisort(array_map('current', $array), $array);

相关问题