2012-03-14 4 views
3

Je veux convertir la liste de PHP (tableau), à savoirliste Convert (tableau) à un tableau associatif en PHP

array("start", "end", "coords") 

dans un tableau associatif avec les valeurs truthy (juste pour être en mesure de tester la présence/absence de clé rapidement), c'est-à-dire quelque chose comme ceci:

array(
    "start" => 1, 
    "end" => 1, 
    "coords" => 1 
) 

Y at-il une façon plus élégante de le faire?

array_fill_keys($ar, 1) 
+10

Ce qui peut être plus élégant qu'un appel à une fonction intégrée? –

+0

@Fixix Je sais que cela semble étrange, mais je trouve cette façon de le faire plutôt maladroite ... – TMS

+0

Vous pouvez itérer sur le tableau si cela vous fait vous sentir mieux;) PHP n'a pas de jeux donc c'est vraiment le meilleur que vous pouvez faire. Vous pouvez bien sûr créer votre propre fonction: 'function setify ($ array) {return array_fill_keys ($ ar, true);}' ou quelque chose comme ça. Ou qu'attendriez-vous? –

Répondre

5

Il n'y a probablement pas de solution plus élégante que array_fill_keys($ar, 1).

1

Il existe une fonction appelée array_flip qui fait cela.

http://php.net/array_flip

Faire array_flip sur un tableau, puis en utilisant isset avéré être beaucoup plus rapide que de faire in_array pour moi. Mais notez que ceci n'est utile que lorsque vous allez chercher plusieurs fois dans le tableau.

+0

'in_array' est de toute façon lent (comparé à' isset'), car il doit effectuer une recherche linéaire. 'array_flip' est une possibilité mais notez que la première entrée aura une valeur de' 0' et qu'elle n'évaluera donc pas 'true' (par exemple' if ($ arr [firstEntry]) '). Bien sûr, on devrait utiliser 'isset' de toute façon, donc les valeurs réelles n'ont pas vraiment d'importance (tant qu'elles ne sont pas' null'). –

+0

'array_flip' - bonne astuce, merci! Cependant, je n'aime pas utiliser 'isset' ... – TMS

+1

@Tomas: Comment testeriez-vous la présence d'un élément? Faire simplement 'if ($ arr [valeur])' vous donnera un 'Notice:' si la clé n'est pas dans le tableau. –