2016-06-08 28 views
0

這是我的數組array_unique用於重新排列值

$input = array("ASTY","PLO","KNGO","c","LOP","OPL","HONGO","TSAY"); 

這裏,

ASTY,TSAY =含有相同的字母。我需要保持第一個。

PLO,LOP,OPL =包含相同的字母。我需要保持第一個。

所以,我期望的輸出數組

$output = array("ASTY","PLO","KNGO","c","HONGO"); 

有任何內建的功能來做到這一點? array_unique適用於非重新排列的單詞。

回答

6

要比較在這種情況下是否有任何兩個值相等,您只需訂購這些字母並比較排序後的值。爲了重複數據刪除陣列,用事實,數組鍵是唯一的:

$unique = []; 
foreach ($input as $word) { 
    $key = str_split($word); 
    sort($key); 
    $unique[join($key)] = $word; 
} 

// optionally: 
$unique = array_values($unique); 
+0

棒極了!非常感謝你。 –

+0

這實際上會返回所有相同組合字符串的最後一次出現;它將在上面的例子中返回「TSAY」和「OPL」,而OP則希望保持第一次出現。您可能希望在將'array_key_exists'分配給'$ unique'之前使用'array_key_exists'。 –

+0

@Irvin如果這真的很重要,修復是微不足道的...... :) – deceze