2016-06-08 2 views
0

Ceci est mon tableauarray_unique pour les valeurs réarrangés

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

ici,

ASTY, TSAY = contient mêmes lettres. Je dois garder le premier.

PLO, LOP, OPL = contient les mêmes lettres. Je dois garder le premier.

Donc, mon tableau de sortie désiré

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

Y at-il fonction builtin de le faire? Array_unique fonctionne correctement pour les mots non réarrangés.

Répondre

6

Pour comparer si deux valeurs sont égales dans ce scénario, vous devez simplement commander les lettres et comparer la valeur ordonnée. Pour dédupliquer le tableau, utilisez le fait que les clés de tableaux sont uniques:

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

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

Superbe! Merci beaucoup. –

+0

Cela retournerait réellement la dernière occurrence de toutes les chaînes de même combinaison; il retournerait "TSAY" et "OPL" dans l'exemple ci-dessus, alors que l'OP voulait conserver la première occurrence. Vous pourriez vouloir utiliser 'array_key_exists' avant de l'assigner à' $ unique'. –

+0

@Irvin Si cela est vraiment important, la solution est triviale ... :) – deceze