PHP merger des tableaux
Résolu
gryzzly
Messages postés
5220
Statut
Contributeur
-
gryzzly Messages postés 5220 Statut Contributeur -
gryzzly Messages postés 5220 Statut Contributeur -
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.