按数值对多维数组进行排序(最后为零)

stw*_*ite 0 php arrays sorting multidimensional-array

我想做的是按数字对多维数组进行排序,但任何值都等于 0,位于数组的末尾。

该代码适用于使用 0 和个位数进行排序,但当向其中添加不同的数字时,它似乎会中断。

输出需要为:41,42,43,44,45,46,0,0,0

<?php

$array = array(
    array(
        "position" => 41,
    ),
    array(
        "position" => 43,
    ),
    array(
        "position" => 42,
    ),
    array(
        "position" => 44,
    ),
    array(
        "position" => 45,
    ),
    array(
        "position" => 0,
    ),
    array(
        "position" => 0,
    ),
    array(
        "position" => 0,
    ),
    array(
        "position" => 46,
    ),
);
// Sort ascending 
usort($array, 'sortByPosition');

// Show result
echo '<pre>';
print_r($array);

function sortByPosition($a, $b) {
    return $a['position'] != 0 ? $a['position'] - $b['position'] : $b['position'] - $a['position'];
}
Run Code Online (Sandbox Code Playgroud)

Don*_*nic 5

你的比较功能有点不对劲。我会这样做:

function sortByPosition($a, $b) {
    if ($a['position'] == $b['position']) return 0;
    if ($a['position'] == 0) return 1;
    if ($b['position'] == 0) return -1;
    return $a['position'] > $b['position'] ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)
  • 首先,如果两个位置相同,则返回 0,无论其中一个是否为零。

  • 第二和第三,如果它们中的任何一个为零,则该一个应该在另一个之后排序(因为如果它们都为零,它已经返回)。

  • 第四,两者都不为零,所以只需正常比较值即可。