【发布时间】:2016-10-30 14:58:40
【问题描述】:
我想按字母顺序对一组单词进行排序。不幸的是,在我的语言(克罗地亚语)中,有双字符字母(例如 lj、nj、dž),以及未使用 php sort 函数正确排序的字母(例如 č、ć、ž、š、đ)。
这是正确排序的克罗地亚字母表(还有一些英文字母):
$alphabet = array(
'a', 'b', 'c',
'č', 'ć', 'd',
'dž', 'đ', 'e',
'f', 'g', 'h',
'i', 'j', 'k',
'l', 'lj', 'm',
'n', 'nj', 'o',
'p', 'q', 'r',
's', 'š', 't',
'u', 'v', 'w',
'x', 'y', 'z', 'ž'
);
这里是一个单词列表,也是正确排序的:
$words = array(
'alfa', 'beta', 'car', 'čvarci', 'ćup', 'drvo', 'džem', 'đak', 'endem', 'fićo', 'grah', 'hrana', 'idealan', 'jabuka', 'koza', 'lijep', 'ljestve', 'mango',
'nebo', 'njezin', 'obrva', 'pivnica', 'qwerty', 'riba', 'sir', 'šaran', 'tikva', 'umanjenica', 'večera', 'wind', 'x-ray', 'yellow', 'zakaj', 'žena'
);
我在想办法对其进行排序。一种方法是将每个单词分成字母。由于多字符字母我不知道该怎么做,所以我问了一个问题并得到了一个很好的答案,解决了这个问题(see here)。所以我遍历数组并使用最佳回答者提供的代码将每个单词分成字母。
当数组循环时,我有一个新数组(我们将其命名为$words_splitted)。该数组的元素也是数组,每个代表一个单词。
Array
(
[0] => Array
(
[0] => a
[1] => l
[2] => f
[3] => a
)
[1] => Array
(
[0] => b
[1] => e
[2] => t
[3] => a
)
[2] => Array
(
[0] => c
[1] => a
[2] => r
)...
...[16] => Array
(
[0] => lj
[1] => e
[2] => s
[3] => t
[4] => v
[5] => e
)
这个想法是通过$alphabet变量的索引值来比较每个数组的每个字母。例如,$words_splitted[0][0] 将与$words_splitted[1][0] 进行比较,然后与$words_splitted[2][0] 进行比较,等等。如果我们比较字母“a”和“b”,字母“a”在$alphabet 变量中的索引号较小,所以它出现在“b”之前。
不幸的是,我被卡住了……我不知道该怎么做。有什么想法吗?
注意:不应使用 PHP 扩展。
【问题讨论】: