2011-03-18 63 views
2

我有一個陣列(18個鍵):array_flip()和UTF8

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

這些鍵是立陶宛語simbols(UTF8編碼)。 當我做$lt = array_flip($en);它返回下列信息:

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

你可以看到4項已丟失(「E」,「U」,「E」,「U」)。這裏發生了什麼?

回答

10

這裏與UTF-8無關;只是簡單的數組/散列表機制。

這些鍵:

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

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

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

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

對應於相同的值在對。當你翻轉你的數組時,每一對中的下一個覆蓋前一個,因爲在一個數組中不能有兩個相同的鍵。因此,結果是:

[E] => Ė 

[U] => Ū 

[e] => ė 

[u] => ū 

如果您需要映射英文字母立陶宛信這樣你可能必須編寫放置多個立陶宛字母數組,對應於同樣的英文字母鍵自定義函數(或者更確切地說,價值)。

+0

該死的,我需要我早上喝杯茶......那真是太愚蠢了。感謝您打開我的眼睛:) – egis 2011-03-18 08:08:08