Aller au contenu

Sujets conseillés

Posté

bonjour,

j'ai lutte contre un algo récalcitrant, un coup de main serait fort apprécié.

Voila mon tableau de base :

Array
(
   [0] => Array
       (
           [0] => 1
           [1] => 2
       )

   [1] => Array
       (
           [0] => a
           [1] => b
           [2] => c
       )

   [2] => Array
       (
           [0] => X
           [1] => Y
           [2] => Z
       )

)

J'aimerais, à partir de ces données, créér un autre tableau, contenant toutes les combinaisons comportant un élément de chaque sous-tableau possible.

C'est à dire : 1-a-X , 1-a-Y, 1-a-Z, 1-b-X, 1-b-Y, ..... , 2-c-Z

Bien sur, le nombre d'éléments de chaque sous-tableau peut varier, ainsi que le nombre de tableaux...

Je pars donc de boucles imbriquées, dans ce style :

for ($n = 1; $n < count($a); $n++) {
       for ($i = 0; $i < count($a[$n]); $i++) {
              // traitement
       }
}

c'est sur la partie "traitement" que je galère, si une bonne âme pouvait me fournir ne serait-ce qu'une piste (sachant que je suis NUL en maths), je lui en serai très reconnaissant !

Si quelqu'un a déja eu à coder ça, un copier/coller fera l'affaire :fete:

Merci d'avance

Posté

Salut !

Tu as une fonction pour faire une boucle dans un tableau tu sais !

foreach($tableau AS $clef=>$valeur)

Dans ton cas, avec $tableau le nom de ton tableau, tu peux faire :

foreach($tableau[0] AS $firstcarac)
{
 foreach($tableau[1] AS $secondcarac)
 {
   foreach($tableau[2] AS $thirdcarac)
   {
      echo "$firstcarac - $secondcarac - $thirdcarac <br>";
   }
 }
}

Posté (modifié)

Oui, je comptais m'appuyer sur des foreach (notamment parce que les index ne sont pas incrémentaux)

Le problème étant que je peux avoir X éléments dans la référence finale, X étant un nombre compris, disons, entre 1 et 6...

Et c'est là que les problèmes commencent.

Je vais essayer d'imbriquer des foreach dans un while, et de stocker la valeur courante de chaque foreach dans un tableau temporaire, puis en tirer les références.

Si vous avez mieux, jsuis preneur ;)

-- Edit --

Voila où j'en suis :

function for_each ($a, $nCurrent, $nLimit) {
global $aRef, $nDepth;
while($nCurrent < $nLimit) {
 foreach ($a[$nCurrent] as $value) {
 echo "$value<br />";
 }
 $nCurrent++;
 for_each($a, $nCurrent, $nLimit);
}
return $aRef;
}

$nLimit = count($a); // ($a étant mon tableau principal)

je ne pense pas que je puisse m'en servir sans récursivité. c'est au niveau du echo "$value<br />"; que j'ai un problème; je devrais remplacer cette ligne par du code permettant de créér les chaines recherchées... je sens que je n'en suis plus très loin, mais je ne vois pas sur quoi partir: un foreach ? garder les valeurs dans un tableau ? comment le structurer ?

merci de vos lumières :)

Modifié par Didier_S

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...