一千萬個為什麽

搜索

php - 排序和刪除重復項?

我有一個看起來像這樣的數組:

    Array (
      [0] => Array (
                num => 09989,
                dis => 20
             )
      [1] => Array (
                num => 09989,
                dis => 10
             )
      [2] => Array (
                num => 56676,
                dis => 15
             )
      [3] => Array (
                num => 44533,
                dis => 20
             )
      [4] => Array (
                num => 44533,
                dis => 50


)  
)

首先,我正在嘗試用num對它們進行排序,似乎無法從php.net中獲取usort示例。它似乎沒有排序...我也試圖刪除數組元素,如果它是一個重復的,其dis值高於另一個。

所以,根據上面的例子,我正在嘗試創建:

Array (
  [0] => Array (
            num => 09989,
            dis => 10
         )
  [1] => Array (
            num => 44533,
            dis => 20
         )
  [2] => Array (
            num => 56676,
            dis => 15
         )

)

這是來自php.net的代碼:

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

最佳答案

在比較函數中, $ a$ b 都是數組的項目。要按 num 對項目進行排序,請使用以下命令:

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

要按 num 然後按 dis 排序,請使用以下命令:

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

對數組進行排序後,您可以使用以下方法過濾帶有重復 num 的項目:

for ($i=1, $j=0, $n=count($array); $i<$n; ++$i) {
    if ($array[$i]['num'] == $array[$j]['num']) {
        unset($array[$i]);
    } else {
        $j = $i;
    }
}

一切都在一起:

$array = array(
    array('num' => '09989', 'dis' => '20'),
    array('num' => '09989', 'dis' => '10'),
    array('num' => '56676', 'dis' => '15'),
    array('num' => '44533', 'dis' => '20'),
    array('num' => '44533', 'dis' => '50')
);

function cmp($a, $b) {
    if ($a['num'] == $b['num']) {
        if ($a['dis'] == $b['dis']) {
            return 0;
        }
        return ($a['dis'] < $b['dis']) ? -1 : 1;
    }
    return ($a['num'] < $b['num']) ? -1 : 1;
}
usort($array, 'cmp');

for ($i=1, $j=0, $n=count($array); $i<$n; ++$i) {
    if ($array[$i]['num'] == $array[$j]['num']) {
        unset($array[$i]);
    } else {
        $j = $i;
    }
}
var_dump($array);

轉載註明原文: php - 排序和刪除重復項?