Recherche "complexe" de variables dans un tableau

marine42
Invité n'ayant pas de compte PHPfrance

05 mai 2010, 08:46

Bonjour,

J'ai un petit souci lors du développement de mon application.
Je souhaite faire une recherche dans un tableau qui contient les noms de fichier présents dans un dossier: jusque là, pas de probleme...
Mais ce que je veux faire, c'est rechercher dans ce tableau si des valeurs présents dans un second tableau existe.
Pour ce faire, j'utilise la fonction php in_array.
Le problème, c'est que dans le tableau où il y a les noms de fichier(ce sont des photos, chaque tuple contient l'extension du fichier (.jpg , .bmp ,...). Or ma recherche porte sur des noms de personnes.
Voici une partie de mon script
while ($tableau[$i] != "")
{
//$tableau contient les noms 
 if ($tableau[$i+1] != $tableau[$i])
 {
   do
   {
       //$nomfichier est le tableau contenant les noms des photos
       if(in_array ($tableau[$i],$nomFichier))
       {
         echo "Trouvé !";
       }
       else 	
       {
	  echo "Pas trouvé...";
       }	
       $j++; 
    }while ($nomFichier[$j] != "");
  }
  $i++;
}
  
Apres avoir fait des tests,ce script fonctionne bien. Mais seulement si ma recherche est vraiment identique ( par exemple testNom.jpg est un nom de photo et est également un nom de personne)
Mais moi , j'ai par exemple :
dans $tableau , j'ai un enregistrement Nom1
dans $nomFichier, j'ai une photo Nom1.jpg
je voudrais que mon script assimile le fait que Nom1.jpg soit "identique" à nom1.
Le but est d'affecter une photo à une personne

Si quelqu'un a une petite idée...

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 mai 2010, 12:06

Si c'est juste un problème de majuscules/minuscules, tu peux tout passer en minuscules avant de faire la recherche :
// passage des valeurs en minuscules
$nomFichierLowerCase = array_map("strtolower", $nomFichier);
while ($tableau[$i] != "") {
//$tableau contient les noms
 if ($tableau[$i+1] != $tableau[$i]) {
   do {
       //$nomfichier est le tableau contenant les noms des photos
       if(in_array (strtolower($tableau[$i]),$nomFichierLowerCase)) {
         echo "Trouvé !";
       } else {
          echo "Pas trouvé...";
       }       
       $j++;
    } while ($nomFichier[$j] != "");
  }
  $i++;
} 
Au passage, je trouve ton assemblage de boucle et de if un peu complexe, pourquoi ne pas utiliser un foreach ? à quoi sert le test ($tableau[$i+1] != $tableau[$i]) ?

Tu pourrais rechercher directement le bon fichier :
// passage des valeurs en minuscules
$nomFichierLowerCase = array_map("strtolower", $nomFichier);
foreach ($tableau as $key=>$nom) {
	// regarde si le nom courant est présent dans le tableau
	if(in_array (strtolower($nom), $nomFichierLowerCase)) {
		echo "Trouvé !";
	} else {
		echo "Pas trouvé...";
	}      
	// récupère la valeur
	$keyNomFichier = array_search(strtolower($nom), $nomFichierLowerCase);
	echo $nom.' correspond au fichier '.$nomFichier[$keyNomFichier];
}