8797 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je m'évertue depuis plusieurs jours à déterminé les différentes valeurs de 2 tableaux.

J'emploie ces tableaux lors d'UPDATE d'un table de liaison.

Lorsque l’utilisateur change des valeurs (il s'agit d'une liste checkbox).
Je vérifie que celle saisies par l'utilisateur correspondent à celle enregistrée dans la BD
- Lorsque les valeurs sont identiques je ne touche pas la table de liaison
- Lorsqu'une valeur disparaît => DELETE de la ligne
- Lorsqu'un valeur est ajoutée => INSERT un nouvelle ligne

J'ai essayer avec les fonctions array_diff(), array_intersect() sans succès. Il me manquait toujours la valeur d'un nouvel élément.

Pour fini, j'y suis arrivé... YES!
Est-ce que mon système est infaillible? Est-ce qu'il est possible de le simplifier?? On peut rêver...

Voici ce que j'ai pondu:




$categoriesBefore = array("courir", "sport", "santé", "minimaliste");
$categoriesNew = array("courir", "santé", "sport","karaté");

echo "Before: ".implode(', ',$categoriesBefore)."<br />";
echo "New: ".implode(', ',$categoriesNew)."<br />";


/////////////////////////////////
for($i=0;$i<count($categoriesBefore);$i++)  { 
  
  if (in_array($categoriesBefore[$i],$categoriesNew)){
   $var_before[]=$categoriesBefore[$i]; // ces valeurs n'ont pas changées
  }else{
    $var_not_exist[]=$categoriesBefore[$i]; // ces valeurs n'existent plus dans les nouvelles catégories'
  }  
} 

for($i=0;$i<count($categoriesNew);$i++)  {
  
  if (!in_array($categoriesNew[$i],$categoriesBefore)){
   $var_new[]=$categoriesNew[$i]; // ces valeurs sont nouvelles
  }
   
} 


echo " Valeur d'origine:  ".implode(', ', $var_before)."<br />";
echo " Nouvelle valeurs:  ".implode(', ', $var_new)."<br />";
echo "Valeur à supprimer:  ".implode(', ', $var_not_exist)." <br />";
///////////////////////////////


D'avance merci les testeurs.

Stéphane
Modérateur
Salut,

Tu t'es cassé la tête pour rien.


$categoriesBefore = array("courir", "sport", "santé", "minimaliste");
$categoriesNew = array("courir", "santé","karaté", "sport");
if(array_diff($categoriesNew,$categoriesBefore) !== array_diff($categoriesBefore,$categoriesNew)){
    echo 'modifie <br />';
    //old
    print_r(array_diff($categoriesBefore,$categoriesNew));
    //new
    print_r(array_diff($categoriesNew,$categoriesBefore));  
}else{
    echo 'laisse telquel';
}

Modifié par niuxe (05 Nov 2012 - 06:18)
Salut,

J'étais sûr qu'un gourou avait une meilleure solution. En fait, c'était tout con... je suis tourné autour sans y pensé!!!

Un grand merci niuxe...