我有一个代码需要按字母顺序排序,不是普通字母,而是指定的。我们可以在下面看到:
$alphabetArray = ['t','w','h','z','k','d','f','v','c','j','x','l','r','n','q','m','g','p','s','b'];
我有这个带有这些字母的数组,我需要按这些字母对其他数组进行排序,在另一个数组中我有这个:$wordsArray = [ "jhona", "eric", "caio", "noah ];
在正常的字母表中是 A B C D E F G H ..但在这个练习中,我需要像 T W H Z K D F V C J X L R N Q M G P S B 这样的排序
任何人都可以帮助我,我尝试排序功能,但不知道如何做到这一点。
最佳答案
使用 Array#usort用于用户定义的带有回调的排序。
注意:必须使用use
有权访问 $alphabetArray
在回调中。
说明: usort
采用 2 个参数:首先是用于排序的数组,其次是用于比较数组的 2 个元素的回调函数。对于这个回调,我使用了一个带有 2 个参数的匿名函数(我使用 $a
和 $b
,但你可以在这里使用你想要的)。因为我需要$alphabetArray
在这个函数中并且不能为此使用第三个参数我使用了 use
在函数内部访问这个全局变量。
为了进行比较,编译器将数组中的 2 个值与此回调进行比较,并按返回值对它们进行排序:
2个值的比较如下:
$alphabetArray
中表示的字母顺序),则查找第一个字符(从左侧开始)。 在这里玩http://sandbox.onlinephpfunctions.com/code/06c40db2ce233494df533fc5f1842d27f94ed003
$alphabetArray = ['t','w','h','z','k','d','f','v','c','j','x','l','r','n','q','m','g','p','s','b'];
$wordsArray = [ "jhona", "eric", "caio", "noah", "noaht", "caxa", "caa" ];
usort($wordsArray, function($a,$b) use($alphabetArray) {
$len = min(strlen($a), strlen($b));
for ($i=0; $i<$len; $i++) {
$aa = array_search($a[$i], $alphabetArray);
$bb = array_search($b[$i], $alphabetArray);
if ($aa < $bb) return -1;
elseif ($aa > $bb) return 1;
}
if (strlen($a)===strlen($b)) return 0;
else return (strlen($a) - strlen($b));
});
print_r($wordsArray);
关于PHP,用一个带字母的数组按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64087337/