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