为什么我需要使用 php usort 进行多次迭代?

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

我从数据库中抓取用户并将其保存到一个数组中(大约有 1500 个用户)。然后我想根据数组字段“flags”对它们进行排序。它是 1 到 99 之间的整数,多个用户可以具有相同的值。所以数组和排序可能看起来像这样:

$Users = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]',
        'flags' => '36'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]',
        'flags' => '35'
    ),
);;

usort($Users, "sort_flags");

这是我的usort回调函数:

function sort_flags($a, $b) {
    if (isset($a['flags']) and isset($b['flags'])) {
        $flag_compare_result = $a['flags'] <=> $b['flags'];     
    }   
    return $flag_compare_result ?? "";
}

我执行一次 usort 语句,得到如下结果(有更多数字,但这只是其中的一部分): 10, 35, 36, 36, 36, 36, 36, 37, 37, 38, 35, 36, 37, 37, 38, 38, 39, 39, 39, 40, 41, 42...

但是如果我执行 usort 语句第二次,我会得到预期的结果: 10, 35, 35, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 41, 42...

我不知道到底要问什么,也许我的代码是错误的,也许我错过了这个函数的一些关键概念。我尝试排序的数组是否太大?如果是,最大随机数组是否有大小限制?

php sorting multidimensional-array usort
1个回答
0
投票
  1. 将值作为整数而不是字符串进行比较。
  2. 在未设置任一标志时,不要提供默认比较结果,而是为标志提供默认值。这可确保您获得一致的总订购量。
function sort_flags($a, $b) {
    return $intval($a['flags'] ?? 0) <=> intval($b['flags'] ?? 0);     
}
© www.soinside.com 2019 - 2024. All rights reserved.