問題:現(xiàn)在有一需求:現(xiàn)有一系列的值,配置三缭受、配置一二胁澳、配置二、......米者,要按照中文的一二三四這種順序排列
根源:排序函數(shù)只會根據(jù)漢字的拼音韭畸、筆畫等排序,不支持自定義順序(目前尚未找到資料)
解決方式:自寫自定義排序函數(shù)
參考思路:
1蔓搞、替換數(shù)組值:將數(shù)組相關(guān)值替換為可以明顯排序的字符并記錄胰丁,如:二替換為2},三替換為3}
2喂分、正常排序:使用數(shù)組函數(shù)正常排序
3锦庸、還原數(shù)組值:將替換后的數(shù)組值,還原為原值
實現(xiàn)代碼:
// 按自定義順序排序方法(針對二維數(shù)組的prop_value字段)
function diy_array_asort(&$array) {
if (!isset($array) || !is_array($array)) {
return false;
}
// 原字符
$zh_arr = array("一","二","三","四","五","六","七","八","九","十");
// 對應(yīng)替換后參與排序的字符(注意加特殊符號蒲祈,防止后面將正常的值替換了)
$num_arr = array("1}","2}","3}","4}","5}","6}","7}","8}","9}","10}");
// 替換前后的匹配數(shù)組
$match_arr = array();
// 替換相關(guān)值
foreach ($array as $k => &$v) {
$replace_str = str_replace($zh_arr, $num_arr, $v['prop_value'], $replace_num);
if($replace_num!=0){
$match_arr[$v['prop_value']] = $replace_str;
$v['prop_value'] = $replace_str;
}
}
// 替換后的數(shù)組進行排序
// 二維數(shù)組根據(jù)字段prop_value對數(shù)組進行升序排列
$prop_values = array_column($array,'prop_value');
array_multisort($prop_values,SORT_ASC,$array);
// 排好序后甘萧,再匹配回來
foreach ($array as $k => &$v) {
if (in_array($v['prop_value'], array_values($match_arr))) {
$newArr = array_flip($match_arr); // 數(shù)組鍵值翻轉(zhuǎn)
$v['prop_value'] = $newArr[$v['prop_value']];
}
}
return true;
}
這里實現(xiàn)的是二維數(shù)組的排序,一維數(shù)組就更簡單了梆掸,自行改造去~