Parcourir des tableaux, toutes combinaisons possibles ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Parcourir des tableaux, toutes combinaisons possibles ?

par Truc » 20 nov. 2008, 16:31

Modération :
inetys, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par inetys » 20 nov. 2008, 16:19

Bonjour,

J'ai finalement trouvé cette solution, sur un autre forum. Cela répond exactement à ce que je recherchais :
function creuse($tableaux,$ligne){

	$suite=$tableaux;
	array_shift($suite);
	$criteres=$GLOBALS[$tableaux[0]];

	foreach($criteres as $crit){
		if(count($tableaux)==1) echo $ligne.'-'.$crit.'<br/>';
		else creuse($suite, $ligne.'-'.$crit);
	}
}

$tailles=array('L','M','XL');
$couleurs=array('rouge','vert','jaune','bleu');
$matieres=array('cuir','daim','croco');

$criteres=array('couleurs','tailles','matieres');
$vide='';

creuse($criteres,$vide);
Merci à tous pour votre participation. ;-)

par zeus » 18 nov. 2008, 18:16

Une simple requête de ce genre te permet d'obtenir ce que tu demandes

Code : Tout sélectionner

SELECT taille.valeur, couleur.valeur FROM caracteristiques_details AS taille, caracteristiques_details AS couleur WHERE taille.id_caracteristiques_noms =28 AND couleur.id_caracteristiques_noms =29
Mais je ne sais pas trop comment automatiser la jointure pour chaque caractéristique :?

par inetys » 18 nov. 2008, 16:25

Fait moi un dump de ta table (avec données) pour que je tente quelques trucs stp

PS : comment exporter un dump
OK, voici :

Code : Tout sélectionner

-- Version du serveur: 5.0.27 CREATE TABLE `caracteristiques_details` ( `id` int(11) unsigned NOT NULL auto_increment, `id_caracteristiques_noms` int(11) unsigned NOT NULL, `valeur` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=59 ; INSERT INTO `caracteristiques_details` (`id`, `id_caracteristiques_noms`, `valeur`) VALUES (43, 28, 'bleu'), (44, 28, 'blanc'), (45, 28, 'rouge'), (46, 28, 'vert'), (47, 28, 'jaune'), (48, 28, 'noir'), (49, 28, 'vert caca d''oie'), (50, 29, 'S'), (51, 29, 'M'), (52, 29, 'L'), (53, 29, 'XL'), (54, 29, 'XXL'), (55, 30, 'cuir'), (56, 30, 'daim'), (57, 30, 'coton'), (58, 30, 'peau de zob'); CREATE TABLE `caracteristiques_noms` ( `id` int(11) unsigned NOT NULL auto_increment, `nom` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ; INSERT INTO `caracteristiques_noms` (`id`, `nom`) VALUES (28, 'Les couleurs'), (29, 'Tailles disponibles'), (30, 'matière');
C'est normal si les id ne commencent pas à 1, c'est parce que je multiplie mes tests ;-)
En tout cas merci beaucoup de t'intéresser à mon problème. En espérant que l'on pourra enfin en venir à bout !

par zeus » 18 nov. 2008, 16:14

Fait moi un dump de ta table (avec données) pour que je tente quelques trucs stp

PS : comment exporter un dump

par inetys » 18 nov. 2008, 12:41

Voici grosso modo les differentes tables :

Table caracteristiques_noms :
- id
- nom

EX :
--
1 - Couleur
2 - Taille
3 - Matière

Table caracteristiques_details :
- id
- id_caracteristiques_noms
- valeur

EX :
--
1 - 1 - bleu
2 - 1 - blanc
3 - 1 - rouge
4 - 2 - L
5 - 2 - XL
6 - 2 - XXL
(etc....)

Voilà, en espérant que ça t'ait avancé.... ;-)
merci d'avance pour ton aide.

par zeus » 18 nov. 2008, 12:23

Est-ce qu'il est possible de voir la structure de tes tables ?

Parce que tu demandes est un bête produit cartésien, ce qui est l'enfance de l'art en SQL ;)

Parcourir des tableaux, toutes combinaisons possibles ?

par inetys » 18 nov. 2008, 11:48

Salut !

Voilà mon problème :

J'ai repris une boutique en ligne (vente de vêtements) dont je ne dois pas toucher à la structure principale. On m'a demandé de rajouter un système de gestion des stocks, pour chaque combinaison de caractéristiques.

Par exemple, prenons les caractéristiques suivantes pour un vêtement donné :

-------------
Couleurs :
- bleu
- rouge
- vert

Tailles :
- L
- M
- XL
-------------

En faisant une requête en base, j'obtiens le tableau PHP suivant :
$tab_stock
(
    [couleur] => Array
        (
            [0] => bleu
            [1] => rouge
            [2] => vert
        )

    [taille] => Array
        (
            [0] => L
            [1] => M
            [2] => XL
        )

)
Maintenant, il faut que je génère dynamiquement, et à partir de ce tableau PHP, toutes les combinaisons possibles. A savoir :
- bleu,L
- bleu, M
- bleu, XL
- rouge, L
- rouge, M
- rouge, XL
- vert, L
- vert, M
- vert, XL

Ma question est :

Comment générer dynamiquement chaque combinaison de caractéristiques à partir du tableau PHP précédent, sachant que *le nombre de caractéristiques peut varier, et qu'il peut exister d'autres sortes de caractéristiques* (par exemple, une caractéristique "matière", qui contient "cuir, daim", etc) ?

J'ai essayé en imbriquant des boucles foreach et for, mais jamais je n'ai réussi à trouver une solution convenable. :-(

La structure du tableau PHP doit-elle être modifiée ?
J'attends avec impatience vos lumières, @ bientôt !

Seb