這里有一個示例代碼:
<?php
$temp_files = array("_temp15.txt","temp10.txt", "temp1.txt","temp22.txt","_temp2.txt");
natsort($temp_files);
print_r($temp_files);
?>
實際輸出:
[4] => _temp2.txt
[0] => _temp15.txt
[2] => temp1.txt
[1] => temp10.txt
[3] => temp22.txt
期望的輸出:
[2] => temp1.txt
[4] => _temp2.txt
[1] => temp10.txt
[0] => _temp15.txt
[3] => temp22.txt
換句話說,我想執行一個忽略給定(但可選)前綴的自然排序。在這種情況下,可選前綴是_.
在我的用例場景中,檔案名是唯一的,無論前綴是否存在。即temp1.txt不允許_temp1.txt。
我發現的丑陋解決方案是:
- 在所有專案之間回圈并存盤帶有前綴的鍵
- 從陣列中洗掉前綴
- 對陣列進行排序
- 使用在第 1 點收集的密鑰恢復前綴
有比這種蠻力方法更好的方法嗎?
uj5u.com熱心網友回復:
uasort使用自定義比較回呼,使用strnatcmp. 然后,您可以_在將兩個值傳遞給 strnatcmp 進行比較之前去掉任何前綴。
uasort($temp_files, function($a, $b) {
return strnatcmp(ltrim($a, '_'), ltrim($b, '_'));
});
編輯:替換usort為uasort, 以維護密鑰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465657.html
上一篇:與多維陣列作斗爭
