Mélanger deux chaines

Alex7000
Invité n'ayant pas de compte PHPfrance

05 juin 2010, 14:10

Bonjour à vous tous,

Me revoilà avec un petit problème... Je ne sais même pas si c'est réalisable ... !?

Donc voici mon problème :

J'ai deux chaines :
$chaine1='0-0-0-45-0';
$chaine2='0-16-0-0-0';
J'aimerai que ces deux chaines se "mélangent" pour en faire qu'une seule...

Qu'en faite le résultat soit :
$chaineFinale ='0-16-0-45-0";
En gros : "La première chaine ($chaine1) est le "masque" (!?)
On regarde la chaine 2 ($chaine2) et on dit qu'a chaque fois que l'on trouve un chiffre "différent de zéro" ben à la même place que ce chiffre on l'ajoute à la chaine1...

Est ce clair ?

Merci de votre aide

Alex.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juin 2010, 14:23

Le plus simple serait d'extraire les nombres de tes chaines pour pouvoir les manipuler plus facilement. Avec la fonction explode(), tu peux générer un tableau facilement avec chacune des chaines. Il te suffit ensuite de comparer un à un les éléments des deux tableaux, et de reconstituer ta chaine avec implode() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

05 juin 2010, 14:39

Ryle merci de ta réponse.

Grâce à toi je viens de trouver : "array_diff_assoc"
Donc je fait :
$chaine1 = "0-0-0-45-0";
$tab1 = explode("-",$chaine1);
$chaine2 = "0-16-0-0-0";
$tab2 = explode("-",$chaine2);

$result = array_diff_assoc($tab1, $tab2);
print_r($result);

Il m'affiche :
Array ( [1] => 0 [3] => 45 )

Mais par contre je sèche quant à les mélanger !?

Si tu pouvais m'aider à trouver.. .Merci ! :)

Alex.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juin 2010, 14:52

array_diff va te permettre d'identifier les éléments qui diffèrent... il t'indique qu'il y a une différence en position 1 et 3. Tu peux utiliser ces informations pour mettre à jour ton tableau. Personnellement j'opterais pour une boucle et un simple test :
$chaine1 = "0-0-0-45-0";
$tab1 = explode("-",$chaine1);
$chaine2 = "0-16-0-0-0";
$tab2 = explode("-",$chaine2);

for ($i=0; $i < count($tab1); $i++) {
   if ($tab1[$i]==0) // si la valeur dans $tab1 est égal à 0 ...
      $tab1[$i] = $tab2[$i]; // ... on récupère la valeur de $tab2 à la même position
}

$chaine = implode("-", $tab1);
echo $chaine;
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

05 juin 2010, 14:57

Ryle Merci de ta réponse, et de ton aide...

Cela fonctionne à merveille !

Merci beaucoup :)

Bon samedi à vous tous
Alex.