PHP merger des tableaux
Résolu
gryzzly
Messages postés
4608
Date d'inscription
Statut
Contributeur
Dernière intervention
-
gryzzly Messages postés 4608 Date d'inscription Statut Contributeur Dernière intervention -
gryzzly Messages postés 4608 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir,
J'ai un petit soucis concernant l'utilisation des tableaux.
Voici le code en question :
Et voici le résultat obtenu :
Mon soucis du moment :
Comment faire pour merger tous ces tableaux en un seul gros tableau comprenant toutes les informations imbriquées ?
En l'occurence, pour le moment, j'arrive à récupérer les catégories seules, les catégories avec les produits imbriqués, les produits avec les ingrédients imbriqués, mais je n'arrive pas à faire un gros tableau de tout ça.
Merci d'avance pour toute aide.
PS : la fonction print_pre() est juste une fonction de mise en page des tableaux (équivalent de print_r())
J'ai un petit soucis concernant l'utilisation des tableaux.
Voici le code en question :
$qcs = " SELECT C.id as cid, C.order as corder, C.name as cname FROM ci_categories AS C ORDER BY `corder` ASC "; $categories = $this->db->query($qcs); $cs = $categories->result_array(); echo 'Categories'; $this->print_pre($cs); foreach ($cs as $c){ $cid = $c['cid']; $qps = " SELECT P.id AS pid, P.name AS pname, P.price AS pprice FROM ci_products AS P WHERE $cid = P.category_id ORDER BY pprice ASC "; $products = $this->db->query($qps); $ps = $products->result_array(); $c['cproducts']=$ps; echo 'Categories et produits'; $this->print_pre($c); foreach ($ps as $p){ $pid = $p['pid']; $qis = " SELECT I.name AS ingredient_name FROM ci_ingredients AS I LEFT JOIN ci_recipies as R ON (I.id = R.ingredient_id) WHERE (R.product_id = $pid) ORDER BY ingredient_name ASC "; $ingredients = $this->db->query($qis); $is = $ingredients->result_array(); $p['pingredients'] = $is; echo 'produits et ingredients'; $this->print_pre($p); } }
Et voici le résultat obtenu :
Categories Array ( [0] => Array ( [cid] => 5 [corder] => 1 [cname] => 1st category ) [1] => Array ( [cid] => 7 [corder] => 2 [cname] => 2nd category ) ) Categories et produits Array ( [cid] => 5 [corder] => 1 [cname] => 1st category [cproducts] => Array ( [0] => Array ( [pid] => 1 [pname] => Azer [pprice] => 13.00 ) [1] => Array ( [pid] => 2 [pname] => Poimlk [pprice] => 25.50 ) ) ) produits et ingredients Array ( [pid] => 1 [pname] => Azer [pprice] => 13.00 [pingredients] => Array ( [0] => Array ( [ingredient_name] => D ) [1] => Array ( [ingredient_name] => F ) ) ) produits et ingredients Array ( [pid] => 2 [pname] => Poimlk [pprice] => 25.50 [pingredients] => Array ( [0] => Array ( [ingredient_name] => A ) [1] => Array ( [ingredient_name] => D ) [2] => Array ( [ingredient_name] => H ) [3] => Array ( [ingredient_name] => R ) ) ) Categories et produits Array ( [cid] => 7 [corder] => 2 [cname] => 2nd category [cproducts] => Array ( [0] => Array ( [pid] => 3 [pname] => 3rd recipe [pprice] => 16.25 ) ) ) produits et ingredients Array ( [pid] => 3 [pname] => 3rd recipe [pprice] => 16.25 [pingredients] => Array ( ) )
Mon soucis du moment :
Comment faire pour merger tous ces tableaux en un seul gros tableau comprenant toutes les informations imbriquées ?
En l'occurence, pour le moment, j'arrive à récupérer les catégories seules, les catégories avec les produits imbriqués, les produits avec les ingrédients imbriqués, mais je n'arrive pas à faire un gros tableau de tout ça.
Merci d'avance pour toute aide.
PS : la fonction print_pre() est juste une fonction de mise en page des tableaux (équivalent de print_r())
A voir également:
- PHP merger des tableaux
- Easy php - Télécharger - Divers Web & Internet
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Tableau des codes ascii - Guide
- Expert php pinterest - Télécharger - Langages
1 réponse
Ca y'est, j'ai trouvé la solution. Il m'a fallu un peu de temps, mais en fait c'était pas compliqué, juste trouver l'idée.
J'ai simplement rajouté un compteur, et j'envoie les données de chaque sous requête dans le tableau initial.
Le résultat, attendu :
Comme ça, je peux envoyer $cs dans ma vue, et avec une simple routine foreach(), je peux faire mettre en page le contenu.
J'ai simplement rajouté un compteur, et j'envoie les données de chaque sous requête dans le tableau initial.
$qcs = " SELECT C.id as cid, C.order as corder, C.name as cname FROM ci_categories AS C ORDER BY `corder` ASC "; $categories = $this->db->query($qcs); $cs = $categories->result_array(); $c_c = 0; // Initialisation du compteur de categorie foreach ($cs as $c){ $cid = $c['cid']; $qps = " SELECT P.id AS pid, P.name AS pname, P.price AS pprice FROM ci_products AS P WHERE $cid = P.category_id ORDER BY pprice ASC "; $products = $this->db->query($qps); $ps = $products->result_array(); $cs[$c_c]['cproducts']=$ps $c_p = 0; // Initialisation du compteur de produit foreach ($ps as $p){ $pid = $p['pid']; $qis = " SELECT I.name AS ingredient_name FROM ci_ingredients AS I LEFT JOIN ci_recipies as R ON (I.id = R.ingredient_id) WHERE (R.product_id = $pid) ORDER BY ingredient_name ASC "; $ingredients = $this->db->query($qis); $is = $ingredients->result_array(); $cs[$c_c]['cproducts'][$c_p]['pingredients'] = $is; $c_p++; } $c_c++; } $this->print_pre($cs);
Le résultat, attendu :
Array ( [0] => Array ( [cid] => 5 [corder] => 1 [cname] => 1st category [cproducts] => Array ( [0] => Array ( [pid] => 1 [pname] => Azer [pprice] => 13.00 [pingredients] => Array ( [0] => Array ( [ingredient_name] => D ) [1] => Array ( [ingredient_name] => F ) ) ) [1] => Array ( [pid] => 2 [pname] => Poimlk [pprice] => 25.50 [pingredients] => Array ( [0] => Array ( [ingredient_name] => A ) [1] => Array ( [ingredient_name] => D ) [2] => Array ( [ingredient_name] => H ) [3] => Array ( [ingredient_name] => R ) ) ) ) ) [1] => Array ( [cid] => 7 [corder] => 2 [cname] => 2nd category [cproducts] => Array ( [0] => Array ( [pid] => 3 [pname] => 3rd recipe [pprice] => 16.25 [pingredients] => Array ( ) ) ) ) )
Comme ça, je peux envoyer $cs dans ma vue, et avec une simple routine foreach(), je peux faire mettre en page le contenu.