1552Fermer1554
NilLe 27/01/2017 à 15:00
Pen^2 (./1550) :
Tiens, un exemple d'un truc python lu hier : myVar = myVar[0] cheeky
Oh, j'ai ça souvent dans du code... l'API LDAP de PHP renvoie des tableaux pour les résultats de requêtes, mais dans un certain nombre de cas (quand on fait une requête sur un dn, donc unique) on sait qu'on n'a qu'un seul résultat à traiter (s'il y en a plus, c'est qu'il y a un bug de l'API ou de la corruption des données, donc on lève éventuellement une exception, mais c'est un cas qui ne doit jamais arriver [sinon ça veut dire que le serveur ne respecte pas les RFC de base, donc on va avoir d'autres problèmes énormes plus importants grin ] donc on se passe de gestion d'erreur).
L'API renvoie en plus un élément du tableau dont la clé est "count" et qui n'est pas un résultat, mais une information sur le résultat (et on n'en a rien à faire).
Du coup, dans une grande majorité des scripts, on va avoir $resultat = $resultat[0];
Ca évite simplement d'avoir une variable intermédiaire inutile. Ce n'est effectivement pas propre, mais quand tu as des traitements qui sont toujours de ce type, c'est quand-même pratique (et c'est un usage assez généralisé dès qu'on a des scripts qui utilisent cette API). Mais c'est le typage faible de PHP qui permet ça.

Exemple de résultat (et encore, ce n'est pas le mode de résultat le plus verbeux) :
Array
(
[count] => 1
[0] => Array
(
[cn] => Array
(
[count] => 1
[0] => MON CN
)

[count] => 1
[dn] => uid=monUid,ou=Users,dc=maBoite,dc=fr
)

)

Cela dit, j'ai résolu le problème en maquillant la saleté, perso tongue
J'ai créé une classe qui implémente l'API sous forme d'objets (elle est strictement impérative à la base) avec une méthode getSimpleResult() qui ne renvoie que le premier élément du tableau (en supprimant au passage les "count" qui sont inutiles la plupart du temps).