我的目標是先按字串長度對陣列進行排序,然后再按字符值對其進行排序,而不改變長度的優先級。
這是我的代碼:
$arr=array("an","am","alien","i");
usort($arr, function ($a, $b) { return (strlen($a) <=> strlen($b)); });
print_r($arr);
我正進入(狀態 :
Array ( [0] => i [1] => an [2] => am [3] => alien )
...幾乎但不存在)
uj5u.com熱心網友回復:
您缺少按字符值排序的邏輯。您可以將該邏輯添加到您的自定義排序方法中:
// if lengths are the same, then sort by value
if (strlen($a) == strlen($b)) {
return $a <=> $b;
}
// otherwise, sort by length
return (strlen($a) <=> strlen($b));
您可以使用三元組將其組合成一行:
return strlen($a) == strlen($b) ? $a <=> $b : strlen($a) <=> strlen($b);
完整示例(https://3v4l.org/msISD):
<?php
$arr=array("aa", "az", "an","am", "ba", "by", "alien","i");
usort($arr, function ($a, $b) {
return strlen($a) == strlen($b) ? $a <=> $b : strlen($a) <=> strlen($b);
});
print_r($arr);
輸出:
Array
(
[0] => i
[1] => aa
[2] => am
[3] => an
[4] => az
[5] => ba
[6] => by
[7] => alien
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/437151.html
上一篇:使用Navicat過濾MySQL資料庫中的多個id值
下一篇:顯示排序的陣列
