PDA

Afficher la version complète : [Réglé][PHP] Comparer les valeurs de deux tableaux?



Nuke-Refugee
21/08/2010, 12h40
Salut les gens,

Je suis en train de chercher le moyen de comparer les valeurs de deux tableaux en PHP... je m'explique:

D'un côté, j'ai chargé une liste de noms de fichiers à l'aide de cette fonction:


function ListDir($rep)
{
$counter=0;
$dir = opendir($rep);
while ($File = readdir($dir))
{
if($File != "." && $File != "..")
{
$counter++;
$pictures[$counter] = $File;
}
}
echo "Done, ".$counter." pictures loaded";
closedir($dir);
}

$pictures étant de type array, naturellement...

De l'autre, j'ai une liste de références (SKU) et d'IDs, chargés depuis une base, comme ceci:


$req_links = mysql_query("SELECT product_id,product_sku FROM jos_vm_product")or die("MySQL error: ".mysql_error());
while ( $result = mysql_fetch_array($req_links))
{
$ids[$result[product_id]] = $result[product_sku];
$count++;
}

Je dois comparer les noms des fichiers et les SKUs et trouver les occurences pour lesquelles le nom de fichier se trouve dans le SKU (du genre 0900 est trouvé dans le SKU 0900BLK mais pas dans 0901BLK). Et exécuter une action lorsque le cas se présente, mais ça c'est la partie facile (requête sur la base).

Est-ce que quelqu'un pourrait me pointer dans la bonne direction? Jusqu'ici j'ai trouvé des infos sur comment voir si deux arrays sont identiques... Mais comment faire pour pour comparer les valeurs une par une? Une boucle sans doute, un truc du style "foreach" mais je ne suis pas du tout familier avec...

Merci.

Seb.

Ca a pris du temps mais je crois que j'ai fini par trouver... En tous cas le résultat a l'air bon:


// Now let's compare those arrays...
echo "

";
for($i=1;$i<$count;$i++)
{
for($j=1;$j<$nbpics;$j++)
{
if(strstr(strtolower($ids[$i]),strtolower($pictures[$j])) != false)
{
echo "Match found: ".$pictures[$j]." => ".$ids[$i]."
";
}

}
}

ce qui donne...

Match found: 0011 => 0011BML
Match found: 0011 => 0011BSM
Match found: 0011 => 0011BXL
Match found: 0011 => 0011NML
Match found: 0011 => 0011NSM
Match found: 0011 => 0011NXL
Match found: 0801 => 0801BEI
Match found: 0801 => 0801BLK
Match found: 0801 => 0801CSUN
Match found: 0801 => 0801FCOF

Donc à priori ça roule. Enfin je ne me suis pas amusé à contrôler les 6802 résultats...