Chercher dans un tableau
Posté : 14 sept. 2008, 13:07
Bonjour !
EDIT quand array_search ne trouve rien, il renvoie tout de même un résultat, faux.
A chaque fois que je développe en PHP je découvre que les tableaux ne se comportent pas comme je l'attends. Il est temps de réviser. Voici mon PB, il devrait vraiment être ultra-simple...:
Soit un tableau $dirList. Si je print_r($dirList);, j'obtiens :
Array ( [0] => . [1] => ./elephant/elephant_in_paris [2] => ./azero/demos [3] => ./azero/counternatures [4] => ./les_intouchables/now [5] => ./les_intouchables/demos_enfer [6] => ./les_intouchables/touche [7] => ./les_intouchables/tamuziga )
C'est donc bien un tableau, CQFD. Maintenant, je souhaiterai faire de menues choses avec. Par exemple, chercher dans ses valeurs une chaine, et obtenir la clé d'index correspondante. C à D, chercher "./les_intouchables/now", et obtenir "4".
Croyez-le où non, j'essaie depuis hier 21:00. J'ai éssayé array search(),is_array(), et array_keys(), tous sensés faire ça (renvoyer la clé d'index de la valeur trouvée) et j'obtiens TJS la valeur à la place (même pas la bonne en plus)... C à D je cherche $DirectoryToScan (valeur = ./les_intouchables/touche) dans $dirList, et au lieu de retourner "6" comme une fonction bien élevée, elle me retourne "./" ce qui est choquant car 1) elle trouve pas ce que je lui demande 2) elle trouve autre chose, ce qui est pire, et 3) Elle renvoie la VALEUR au lieu de la clé !! Je veux dire, le foirage total !!!
J'ai aussi essayé de permuter valeurs / clés à l'aide de array_flip(), ça fait *rien*. Rien !! Je lui demande poliment :
global $dirList;
array_flip($dirList);
print_r($dirList);
Rien ! Que dalle, la liste sort comme si j'avais rien fait RHAA !!
Comment faire une recherche dans un array ?? Une recherche qui *marche*, qui trouve $aiguille dans $tas_de_foin, et qui renvoie l'INDEX de $tas_de_foin[$aiguille] ?? HELP, je deviens OUF, je suis sur ce truc non-stop depuis 4, 5h !!
[email protected]/bondimanche
NB : Mon code (Ça ne fait rien de pratique, c'est juste un prototype, j'allais coder cette fonction quand j'ai découvert que je comprenais rienà la vie):
EDIT quand array_search ne trouve rien, il renvoie tout de même un résultat, faux.
A chaque fois que je développe en PHP je découvre que les tableaux ne se comportent pas comme je l'attends. Il est temps de réviser. Voici mon PB, il devrait vraiment être ultra-simple...:
Soit un tableau $dirList. Si je print_r($dirList);, j'obtiens :
Array ( [0] => . [1] => ./elephant/elephant_in_paris [2] => ./azero/demos [3] => ./azero/counternatures [4] => ./les_intouchables/now [5] => ./les_intouchables/demos_enfer [6] => ./les_intouchables/touche [7] => ./les_intouchables/tamuziga )
C'est donc bien un tableau, CQFD. Maintenant, je souhaiterai faire de menues choses avec. Par exemple, chercher dans ses valeurs une chaine, et obtenir la clé d'index correspondante. C à D, chercher "./les_intouchables/now", et obtenir "4".
Croyez-le où non, j'essaie depuis hier 21:00. J'ai éssayé array search(),is_array(), et array_keys(), tous sensés faire ça (renvoyer la clé d'index de la valeur trouvée) et j'obtiens TJS la valeur à la place (même pas la bonne en plus)... C à D je cherche $DirectoryToScan (valeur = ./les_intouchables/touche) dans $dirList, et au lieu de retourner "6" comme une fonction bien élevée, elle me retourne "./" ce qui est choquant car 1) elle trouve pas ce que je lui demande 2) elle trouve autre chose, ce qui est pire, et 3) Elle renvoie la VALEUR au lieu de la clé !! Je veux dire, le foirage total !!!
J'ai aussi essayé de permuter valeurs / clés à l'aide de array_flip(), ça fait *rien*. Rien !! Je lui demande poliment :
global $dirList;
array_flip($dirList);
print_r($dirList);
Rien ! Que dalle, la liste sort comme si j'avais rien fait RHAA !!
Comment faire une recherche dans un array ?? Une recherche qui *marche*, qui trouve $aiguille dans $tas_de_foin, et qui renvoie l'INDEX de $tas_de_foin[$aiguille] ?? HELP, je deviens OUF, je suis sur ce truc non-stop depuis 4, 5h !!
[email protected]/bondimanche
NB : Mon code (Ça ne fait rien de pratique, c'est juste un prototype, j'allais coder cette fonction quand j'ai découvert que je comprenais rienà la vie):
function browse($nav)
{
global $DirectoryToScan;
global $dirList;
print_r($dirList);
$dirListKey = in_array($DirectoryToScan, $dirList);
// $dirListKey = array_keys($dirList, $DirectoryToScan);
if ($nav == 'next') {
echo ' $DirectoryToScan ='.'./'.$DirectoryToScan;
echo ' $dirListKey ='.'./'.$dirListKey;
}
}