array_flip()和utf8

时间:2011-03-18 08:03:52

标签: php arrays utf-8 transliteration

我有一个数组(18个键):

$en = array(
    'Ą' => 'A',
    'Č' => 'C',
    'Ę' => 'E',
    'Ė' => 'E',
    'Į' => 'I',
    'Š' => 'S',
    'Ų' => 'U',
    'Ū' => 'U',
    'Ž' => 'Z',
    'ą' => 'a',
    'č' => 'c',
    'ę' => 'e',
    'ė' => 'e',
    'į' => 'i',
    'š' => 's',
    'ų' => 'u',
    'ū' => 'u',
    'ž' => 'z',
);

这些键是立陶宛符号(utf8编码)。 当我$lt = array_flip($en);时,它会返回以下内容:

Array
(
    [A] => Ą
    [C] => Č
    [E] => Ė
    [I] => Į
    [S] => Š
    [U] => Ū
    [Z] => Ž
    [a] => ą
    [c] => č
    [e] => ė
    [i] => į
    [s] => š
    [u] => ū
    [z] => ž
)

你可以看到缺少4个键('Ę','Ų','ę','ų')。怎么回事?

1 个答案:

答案 0 :(得分:10)

这里与UTF-8没什么关系;只是简单的数组/哈希表机制。

这些键:

'Ę' => 'E',
'Ė' => 'E',

'Ų' => 'U',
'Ū' => 'U',

'ę' => 'e',
'ė' => 'e',

'ų' => 'u',
'ū' => 'u',

对应于成对的相同值。翻转数组时,每对中的下一个会覆盖前一个数组,因为单个数组中不能有两个相同的键。因此结果:

[E] => Ė

[U] => Ū

[e] => ė

[u] => ū

如果您需要将英文字母映射到此类立陶宛字母,您可能需要编写一个自定义函数,将多个立陶宛字母放在一个数组中,对应相同的英文字母键(或更确切地说,值)。