[Résolu / Algo] combinaisons
4 messages • Page 1 sur 1
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
[Résolu / Algo] combinaisons
Salut !
Petit problème d'algo qui a l'air tout bête, je patauge un peu.
J'ai un gros tableau contenant des "sous-tableaux":
'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
...
On m'a répondu de faire :
Ce qui effectivement, marche très bien avec 3 sous tableaux...
Mais si j'ai un $tableau[3], $tableau[4]...
J'aimerais généraliser ça.
Je pense, après y avoir réfléchi, qu'il faut utiliser une fonction récursive.
J'en suis arrivé là :
C'est au niveau du "echo $value" que je bloque, en effet, je n'arrive pas à récupérer l'ensemble des valeurs précédentes...
Quelqu'un aurait une piste où me lancer ? (un foreach ? un while ?)
Petit problème d'algo qui a l'air tout bête, je patauge un peu.
J'ai un gros tableau contenant des "sous-tableaux":
- Code: Tout sélectionner
Array (
[0] => Array (
[0] => 1
[1] => 2
)
[1] => Array (
[0] => a
[1] => b
[2] => c
)
[2] => Array (
[0] => X
[1] => Y
[2] => Z
)
)
'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
...
On m'a répondu de faire :
- Code: Tout sélectionner
foreach($tableau[0] AS $firstcarac) {
foreach($tableau[1] AS $secondcarac) {
foreach($tableau[2] AS $thirdcarac) {
echo "$firstcarac - $secondcarac - $thirdcarac <br>";
}
}
}
Ce qui effectivement, marche très bien avec 3 sous tableaux...
Mais si j'ai un $tableau[3], $tableau[4]...
J'aimerais généraliser ça.
Je pense, après y avoir réfléchi, qu'il faut utiliser une fonction récursive.
J'en suis arrivé là :
- Code: Tout sélectionner
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;
}
// $a est le tableau décrit au début du post
$nLimit = count($a);
C'est au niveau du "echo $value" que je bloque, en effet, je n'arrive pas à récupérer l'ensemble des valeurs précédentes...
Quelqu'un aurait une piste où me lancer ? (un foreach ? un while ?)
Dernière édition par Didier_S le Lun Aoû 01, 2005 4:57, édité 1 fois.
Re: [Algo] combinaisons, besoin d'aide
Didier_S a écrit:Je pense, après y avoir réfléchi, qu'il faut utiliser une fonction récursive.
J'en suis arrivé là :
Oui, la récursivité est l'une des solutions possibles.
Didier_S a écrit:
- Code: Tout sélectionner
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;
}
// $a est le tableau décrit au début du post
$nLimit = count($a);
en récursivité, il ne faut JAMAIS affecter une variable passée en paramètre car ça altère aussi toutes les instances suivantes de ce paramètre. Le "$nCurrent++" devrait-être plutôt "$n=$nCurrent+1;" et ensuite tu passes $n en valeur de paramètre.
Didier_S a écrit:C'est au niveau du "echo $value" que je bloque, en effet, je n'arrive pas à récupérer l'ensemble des valeurs précédentes...
Quelqu'un aurait une piste où me lancer ? (un foreach ? un while ?)
je suis peut-être fatiguée, mais je vois pas où tu veux en venir avec ta boucle while... je préfèrerais:
- Code: Tout sélectionner
function for_each($a, $nCurrent, $nLimit, $v='') {
foreach($a[$nCurrent] as $value) {
if($nLimit==$nCurrent) {echo $v.$value.'<br />';}
else {
$w=$v.$value.'-';
$n=$nCurrent+1;
for_each($a,$n,$nLimit,$w);
}
}
}
for_each($a,0,count($a)-1);
le -1 initial est important dans mon exemple.
Tisha
en copiant le code, je me suis dit que ca avait l'air tellement simple que tu avais du mal comprendre... et ça marche impeccable, j'ai encore du mal à y croire !
je te remercie infiniment, et je vais de ce pas étudier les itérations de ton code, pour mieux comprendre les principes récursifs (que j'ai trop longtemps ignorés)
tu viens de gagner un esclave dévoué, à vie !
je te remercie infiniment, et je vais de ce pas étudier les itérations de ton code, pour mieux comprendre les principes récursifs (que j'ai trop longtemps ignorés)
tu viens de gagner un esclave dévoué, à vie !
4 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Voici pourquoi Google fournit peu d'infos sur les backlinks
- Ecrire un sitemap pour Google News
- Privilégier le texte au contenu multimédia : conseil n°9 en référencement
- Ask Jeeves disponible en France sur fr.ask.com
- Définition du cloaking selon Google : exemples commentés
- Google commence à indexer les formulaires
- A la recherche de combinaisons de mots-clés
- PHP : Lister les combinaisons uniques de tags
- Nouvel algo du pr
- Autre algo
- Modification de l algo yahoo
- Nouvel Algo ou pas ?
- Plusieurs algo google?
- Algo Google : Nom de code Dewey
- Modif algo Google image ?
- Baisse de pages référencées, nouvelle algo???
- Nouveau algo pour 2007?
- Que se passe-t-il avec le nouvel algo de Google?
- GG achète un algo conçu par un étudiant
- nouvel algo google aux patates ?
- Algo LSI : J'ai raté un truc ?
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités



le forum