Articles

Le mois de la fonction PHP : des clés et des valeurs

  • Ecrit par Damien Seguy
  • dimanche 15 avril 2007
Image pour le titre du contenu

This document is also available in English en 


On se sert souvent des tableaux associatifs, aussi appelés hash, pour relier deux valeurs ensemble : une clé, qui doit être unique, et une valeur, qui peut être n'importe quoi d'autre. Cela permet de gérer en groupe des données qui ont un sens ensemble : une ligne MySQL avec les noms des colonnes, la liste des membres d'un club et leur date d'adhésion, un identifiant de page Web et sa ligne, un nom d'utilisateur et sa fiche complète.

Les accès aux valeurs individuelles se font à partir de la clé. Si vous avez perdu la clé, il faut alors passer par array_search() : cette fonction fouille le tableau, et retrouve la clé associé à une valeur. Si vous devez simplement rechercher la présence d'une valeur dans un tableau, utilisez in_array(), qui indique seulement si une valeur fait partie d'un tableau ou pas.

Pour tester la présence d'une clé, il faut passer par isset(). D'ailleurs, il est plus rapide de tester la présence d'une clé avec isset que de passer par in_array(), ou même array_search(). Si vous devez tester la présence d'une valeur dans un tableau, il sera toujours plus intéressant d'utiliser cette fonction.

Pour passer d'un tableau de valeurs à un tableau de clés, utilisez array_flip(). Sachez que cette opération est coûteuse, alors utilisez cette astuce uniquement si vous allez faire de nombreux tests de présence dans le tableau. Sinon, essayez de construire votre tableau uniquement avec des clés, pour éviter array_flip().

Tableau de 100000 éléments
array_search()         : 6.8990 ms
in_array()             : 6.9160 ms
isset() + array_flip() : 36.9990 ms
isset() seul           : 0.0040 ms

array_keys() permet d'extraire la liste des clés d'un tableau. array_values() permet de se débarasser des clés, ou de réindexer un tableau à partir de 0, dans le cas où on a supprimé des éléments, et que l'on veut recréer une séquence d'index continue.

Pour combiner un tableau de clé et un tableau de valeurs pour en faire un tableau associatif de clés et valeurs, il faut utiliser array_combine(). Comme ceci :

<?php
 
 
$t = array('a' => 'A', 'b' => 'B', 'c' => 'C');
$c = array_keys($t);
$v = array_values($t);
 
 
print_r($c);
print_r($v);
 
 
$v[] = 'D';
$c[9] = 'd';
 
 
$t2 = array_combine($c,$v);
print_r($t2);
 
 
?>

Notez que les clés sont alors totalement ignorées par array_combine() : cette fonction s'assure que les deux tableaux ont le même nombre d'éléments, mais ne tient pas compte des clés établies. Il faut donc que les tableaux soient rangés dans le même ordre pour que les associations soient correctes.

A noter
  • array_combine() a été introduit en PHP 5.2.0
  • array_combine() ne fait que souder deux tableaux en un seul : il ne fait pas de transformation d'un tableau en un autre, basé sur les clés.

< Précédent   Suivant >

Vous devez vous connecter pour commenter