我有一个代码需要按字母顺序排序,而不是普通字母,而是指定的字母。我们可以在下面看到:
$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
任何人都可以帮助我,我尝试排序功能,但是idk怎么做。
答案 0 :(得分:2)
使用Array#usort进行带有回调的用户定义排序。
注意:必须使用use
才能在回调中访问$alphabetArray
。
说明: usort
带有2个参数:首先是用于排序的数组,其次是用于比较数组中2个元素的回调函数。对于此回调,我使用了带有2个参数的匿名函数(我使用$a
和$b
,但您可以在此处使用所需的内容)。因为我需要此功能中的$alphabetArray
,并且不能为此使用第三个参数,所以我使用use
来访问该函数内部的此全局变量。
为了进行比较,编译器将始终将数组中的2个值与此回调进行比较,并按返回值对它们进行排序:
$ a <$ b需要-1(或任何其他负值)
$ a = $ b需要0
$ a> $ b需要+1(或任何其他正值)
两个值的比较如下:
$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);