PHP二維數組如何實現排序并添加排名?

詳解php二維數組排序及排名算法

本文將詳細闡述如何高效地對PHP二維數組進行排序,并為每個子數組添加排名信息。示例中,PHP二維數組包含“序號”(xuhao)和“票數”(piaoshu)兩個字段,我們將根據票數降序排序(票數相同則序號小的優先), 并為每個子數組添加“排名”(paiming)字段。

PHP二維數組如何實現排序并添加排名?

初始數據結構如下:

$data = array(   array("xuhao" => "1", "piaoshu" => 3),   array("xuhao" => "2", "piaoshu" => 5),   array("xuhao" => "3", "piaoshu" => 5), );

我們的目標是:按照piaoshu字段降序排列,piaoshu值相同時,按xuhao字段升序排列,并在每個子數組中增加paiming字段顯示排名。

立即學習PHP免費學習筆記(深入)”;

核心函數是array_multisort,它能對多維數組進行排序。我們先提取piaoshu和xuhao字段,用array_multisort排序,最后將排名添加到原始數組。

代碼實現如下:

$data = array(   array("xuhao" => "1", "piaoshu" => 3),   array("xuhao" => "2", "piaoshu" => 5),   array("xuhao" => "3", "piaoshu" => 5), );  $piaoshu = array_column($data, 'piaoshu'); $xuhao = array_column($data, 'xuhao');  array_multisort($piaoshu, SORT_DESC, $xuhao, SORT_ASC, $data);  $rank = 1; $prev_piaoshu = -1; foreach ($data as &$item) {     if ($item['piaoshu'] != $prev_piaoshu) {         $item['paiming'] = $rank;         $prev_piaoshu = $item['piaoshu'];         $rank++;     } else {         $item['paiming'] = $rank++;     } }  print_r($data);

代碼首先提取piaoshu和xuhao,然后使用array_multisort函數,按票數降序、序號升序排序。接下來,代碼遍歷排序后的數組,根據票數變化計算排名,并添加到每個子數組。如果票數相同,排名遞增。

最終結果:

array(3) {   [0]=>   array(3) {     ["xuhao"]=>     string(1) "2"     ["piaoshu"]=>     int(5)     ["paiming"]=>     int(1)   }   [1]=>   array(3) {     ["xuhao"]=>     string(1) "3"     ["piaoshu"]=>     int(5)     ["paiming"]=>     int(2)   }   [2]=>   array(3) {     ["xuhao"]=>     string(1) "1"     ["piaoshu"]=>     int(3)     ["paiming"]=>     int(3)   } }

此方法高效地完成了二維數組的排序和排名。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享