Combiner les éléments de n tableaux

phd
Invité n'ayant pas de compte PHPfrance

10 avr. 2012, 22:37

Bonjour,

A l'aide d'un formulaire comportant des cases à cocher réparties en différentes catégories, je récupère les informations sélectionnées par l'utilisateur.

Je souhaite à présent combiner chaque choix d'une catégorie avec chaque choix dans les autres catégories et présenter la liste des combinaisons à l'utilisateur.

Si l'utilisateur choisit une ou plusieurs options dans chaque catégorie, il est relativement aisé de bâtir une imbrication de boucles foreach, puisque leur nombre sera toujours identique. Par exemple, si le formulaire contient 3 catégories d'options, le code sera :
foreach ($form['cat1'] as $k1 => $val1)
	{
	foreach ($form['cat2'] as $k2 => $val2)
		{
		foreach ($form['cat3'] as $k3 => $val3)
			{
			echo  $val1.' _ '.$val2.' _ '.$val3.'<br/>';
			}
		}
	}

Supposons la variable $_POST suivante :
Array
(
    [cat1] => Array
        (
            [0] => maison
            [1] => demeure
        )

    [cat2] => Array
        (
            [0] => nuage
            [1] => soleil
        )

    [cat3] => Array
        (
            [0] => heureux
            [1] => triste
        )

)
On obtient donc la liste :

maison _ nuage _ heureux
maison _ nuage _ triste
maison _ soleil _ heureux
maison _ soleil _ triste
demeure_ nuage _ heureux
demeure_ nuage _ triste
demeure _ soleil _ heureux
demeure _ soleil _ triste

Là où ça se complique sérieusement c'est si l'utilisateur ne choisit pas d'options dans une catégorie.

Par exemple, s'il ne choisit aucune option dans cat2, la liste serait :

maison _ heureux
maison _ triste
demeure _ heureux
demeure _ triste


Mon problème est donc de concevoir un code PHP qui tienne compte du fait que l'utilisateur choisit ou non des options dans les différentes catégories, car cela déterminera le nombre de boucles foreach.

Merci d'avance pour vos conseils.

Mammouth du PHP | 2278 Messages

11 avr. 2012, 13:10

Je me demande s'il ne suffirait pas, lorsqu'on récupère les choix de l'utilisateur, d'écrire qqch dans le enre de:
$tableau_1 = issest($_POST['choix1']) ? $_POST['choix1'] : array();
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 110 Messages

11 avr. 2012, 14:17

Je me demande s'il ne suffirait pas, lorsqu'on récupère les choix de l'utilisateur, d'écrire qqch dans le enre de:
$tableau_1 = issest($_POST['choix1']) ? $_POST['choix1'] : array();

Oui l'écriture ternaire, plus rapide qu'un if, c'est justement ça que tu dois faire, et tu devrais faire 2 boucles grand maximum je pense.

Une pour les catégories, une pour tes traitements.