按照每個字串中字元重複出現的次數從大到小排列;如果次數相同,按照出現次數第二多的字元排序,如果仍然一樣多,按照陣列中字串預設順序進排序,例如: 字串 "abcabccaa" 中出現次數最多的字元是 a , 出現了 4 次;出現次數第二多的是 c , 出現了 3 次;出現次數第三多的是 b , 出現了 2 次 那麼
["yytyts", "abcabccaa", "uuuxyy", "mommentem"]
排序之後的結果是:["abcabccaa", "mommentem", "yytyts", "uuuxyy"]
請根據以上條件,實現sortArray()
方法
昨天看到的一個題目做了一個多小時,很考驗PHP基礎字元和陣列函式。
我的方法:
function strToArr($str)
{
$arr = str_split($str);
// 計算重複的值進行排序
$arr = array_count_values($arr);
arsort($arr);
return $arr;
}
// 先根據陣列值排序再根據陣列鍵排序
function multisort($array) {
$keys = array_keys($array);
$vals = array_values($array);
array_multisort($vals, SORT_DESC, $keys);
dd($keys, $vals);
//將排序後的鍵和值重新組合成陣列
$arr = array_combine($keys, $vals);
return $arr;
}
function sortArray($array)
{
$count_arr = 2;
// 拆分陣列
foreach ($array as $key => $val){
// 獲取計算好的陣列
$arr[$key] = strToArr($val);
}
// 構建排序用陣列,只要前兩個
$array_new = [];
for ($i = 0; $i < $count_arr; $i++) {
foreach ($arr as $key => $val) {
$array_new[$i][$key] = array_shift($arr[$key])?:0;
}
arsort($array_new[$i]);
}
// 獲取排序key
$array_sort = [];
for ($i = 0; $i < count($array); $i++) {
$keys[] = intval($array_new[0][$i].$array_new[1][$i]);
}
// 先根據陣列值排序再根據陣列鍵排序
$keys = multisort($keys);
// 根據key排序獲取新陣列
foreach ($keys as $key => $val) {
$array_sort[] = $array[$key];
}
return $array_sort;
}
$array = ["yytyts", "abcabccaa", "uuuxyy", "mommentem"];
echo '<pre>';
print_r(sortArray($array));
不知道有沒有更6的方法,求教
本作品採用《CC 協議》,轉載必須註明作者和本文連結