Page 1 sur 1
Php + 2 tableau a comparer
Posté : 20 mars 2009, 11:52
par neuneu
Bonjour, j'ai un petit probleme qui me prend la tête depuis des heures, tout aide serrait bien venue :
J'ai deux variables $champi et $sql_for_product qui peuvent contenir des champs de cette forme :
champi Code : Tout sélectionner
OR PF.PRODUCT_ID = '1037' OR PF.PRODUCT_ID = '1043' OR PF.PRODUCT_ID = '1028' OR PF.PRODUCT_ID = '1029' OR PF.PRODUCT_ID = '1036' OR PF.PRODUCT_ID = '1044'
sql_for_product Code : Tout sélectionner
OR PF.PRODUCT_ID = '1037' OR PF.PRODUCT_ID = '1005' OR PF.PRODUCT_ID = '1006' OR PF.PRODUCT_ID = '1009' OR PF.PRODUCT_ID = '1012' OR PF.PRODUCT_ID = '1015' OR PF.PRODUCT_ID = '1018' OR PF.PRODUCT_ID = '1029' OR PF.PRODUCT_ID = '1031' OR PF.PRODUCT_ID = '1032' OR PF.PRODUCT_ID = '1041' OR PF.PRODUCT_ID = '1043' OR PF.PRODUCT_ID = '1050'
Ce que j'aimerais, c'est mettre dans une troisieme variable le match des deux, c'est a dire seulement les PF.PRODUCT_ID qu'on trouve dans les deux, ce qui donnerais qq chose comme ca :
troisieme variable Code : Tout sélectionner
OR PF.PRODUCT_ID = '1037' OR PF.PRODUCT_ID = '1043' OR PF.PRODUCT_ID = '1029'
MERCI DE VOTRE AIDE

Posté : 20 mars 2009, 13:02
par Ryle
Avec une expression régulière (voire un explode()), tu dois pouvoir générer pour chacune de tes variable, un tableau contenant les différentes valeurs. A partir de ces deux tableaux, un array_intersect() te retournera les éléments communs aux deux tableaux qu'il te suffira de remettre en forme ensuite

Posté : 20 mars 2009, 14:33
par neuneu
je vais essayer, même si j'eu esperer qu'il existait une fonction qui puisse resoudre mon probleme, je vous tient au courant et remercis de la reponse rapide
Posté : 20 mars 2009, 14:47
par Aureusms
Je reprends Ryle (l'idée de Ryle : je n'oserai pas te reprendre).
Fais un explode pour ne récupérer que les chiffres (c'est en fait ce que tu veux)
<?php
//tu créé le tableau
$tab_temp_champi = explode ("'",$champi);
$champi = array();
//ensuite tu la purge des entités non numériques
foreach ($tab_temp_champi as $valeur)
{
$valeur = trim($valeur);
if (is_numeric($valeur)) $tab_champi[] = $valeur;
}
//tu fais la même chose avec sql_for_product qu'on appellerai $tab_sql_for_product
//puis tu calcul l'intersection des deux
$tab_difference = array_diff ($tab_sql_for_product,$tab_champi);
?>
Posté : 22 mars 2009, 14:03
par neuneu
Merci pour ce code, malheuresement, j'ai un petit probleme :
Code : Tout sélectionner
Warning: array_diff() [function.array-diff]: Argument #2 is not an array in /include/include_filter.php on line 199
J'ai pourtant bien suivi le code :
Code : Tout sélectionner
//tu créé le tableau
$tab_temp_champi = explode ("'",$champi);
$champi = array();
//ensuite tu la purge des entités non numériques
foreach ($tab_temp_champi as $valeur)
{
$valeur = trim($valeur);
if (is_numeric($valeur)) $tab_champi[] = $valeur;
}
//tu fais la même chose avec sql_for_product qu'on appellerai $tab_sql_for_product
$tab_temp_sql_for_product = explode ("'",$sql_for_product);
$sql_for_product = array();
//ensuite tu la purge des entités non numériques
foreach ($tab_temp_sql_for_product as $valeur)
{
$valeur = trim($valeur);
if (is_numeric($valeur)) $tab_sql_for_product[] = $valeur;
}
//puis tu calcul l'intersection des deux
$tab_difference = array_diff($tab_sql_for_product,$tab_champi);
Il semble que $tab_champi ne soit pas pris comme un tableau, any idea ?
Merci encore
Posté : 22 mars 2009, 17:22
par Sékiltoyai
Il semble que $tab_champi ne soit pas pris comme un tableau, any idea ?
Bah mis à part dans la boule, à aucun moment tu ne dis que c'est un tableau, donc si tu ne rentres pas dans la boucle, il n'y a pas de raison qu'il le considère comme un tableau…
Posté : 22 mars 2009, 20:41
par neuneu
bas , je ne comprend pas bien ca justement, il me semble que le code de Aureusm, $champi devient un tableau grace a ce code
//tu créé le tableau
$tab_temp_champi = explode ("'",$champi);
$champi = array();
Posté : 22 mars 2009, 20:53
par Ryle
Ben effectivement, "$champi" est bien déclaré comme étant un tableau... mais ça n'a pas vraiment d'importance vu qu'ensuite tu utilises la variable "$tab_champi" qui elle n'a pas été déclarée comme tel

Posté : 22 mars 2009, 21:52
par Sékiltoyai
Ben effectivement, "$champi" est bien déclaré comme étant un tableau... mais ça n'a pas vraiment d'importance vu qu'ensuite tu utilises la variable "$tab_champi" qui elle n'a pas été déclarée comme tel

Voilà
A moins que tu ne comptes sur PHP pour supposer que tab_champi et champi c'est la même chose, auquel cas je te présenterais toutes les plus sincères excuses.

Posté : 23 mars 2009, 12:41
par neuneu
Effectivement, cela marche, merci a vous tous pour cette aide plus qu'agreable
PS : je ne peux changer le nom du titre avec resolut n'etant pas membre
