Salut
est-ce que quelqu'un aurait une solution pour transformer ce tableau
Array ( [product_id] => 132 [price] => 10 [product] => a2 [id] => 61 [name] => couleur [opt_id] => 61 [val] => noir )
Array ( [product_id] => 132 [price] => 10 [product] => a2 [id] => 61 [name] => couleur [opt_id] => 61 [val] => blanc )
Array ( [product_id] => 132 [price] => 10 [product] => a2 [id] => 61 [name] => couleur [opt_id] => 61 [val] => bleu )
Array ( [product_id] => 132 [price] => 10 [product] => a2 [id] => 60 [name] => cadre [opt_id] => 60 [val] => oui )
Array ( [product_id] => 132 [price] => 10 [product] => a2 [id] => 61 [name] => couleur [opt_id] => 61 [val] => rouge )
Array ( [product_id] => 132 [price] => 10 [product] => a2 [id] => 60 [name] => cadre [opt_id] => 60 [val] => non )
Array ( [product_id] => 129 [price] => 1 [product] => a1 [id] => 61 [name] => couleur [opt_id] => 61 [val] => noir )
Array ( [product_id] => 129 [price] => 1 [product] => a1 [id] => 61 [name] => couleur [opt_id] => 61 [val] => blanc )
Array ( [product_id] => 129 [price] => 1 [product] => a1 [id] => 61 [name] => couleur [opt_id] => 61 [val] => bleu )
Array ( [product_id] => 129 [price] => 1 [product] => a1 [id] => 60 [name] => cadre [opt_id] => 60 [val] => oui )
Array ( [product_id] => 129 [price] => 1 [product] => a1 [id] => 61 [name] => couleur [opt_id] => 61 [val] => rouge )
Array ( [product_id] => 129 [price] => 1 [product] => a1 [id] => 60 [name] => cadre [opt_id] => 60 [val] => non )
en celui-ci
[0]=array(
product_id=132
price=10
product=a2
[0]=array(
opt_id=61
name=couleur
[0]= array(
noir
bleu
rouge
blanc
)
[1]= array(
opt_id=60
name=cadre
[0]= array(
oui
non
)
)
)
[1]=array(
product_id=129
product=a1
price=1
[0]=array(
opt_id=61
name=couleur
[0]= array(
noir
bleu
rouge
blanc
)
[1]= array(
opt_id=60
name=cadre
[0]= array(
oui
non
)
)
)
Il y a bien la solution d'obtenir le tableau directement en passants mes requètes dans les boucles while mais c'est pas conseillé.
Merci
Merci
Hors ligne
Salut
il n'y a rien de magique, il te faut un second tableau que tu peuple en fesant un for sur ton premier tableau
et il faut bien sur que ton tableau de sortie soit indéxé par product_id
ça sera en O(n) et tu ne pourra pas avoir plus rapide
Hors ligne
en fait j'arrive à le faire au premier niveau (product_id)
$result = pwg_query($query); while($row = pwg_db_fetch_assoc($result)){ $prods[] = $row; } $rprod =""; foreach ($prods as $p) { if($p['product_id'] != $rprod){ if(isset($option)){ $sub[]=$product; $sub[]=$price; $sub[]=$option; $prod[$rprod]=$sub; } $rprod = $p['product_id'] ; $option= array(); $opt= array(); $opt['option_id']= $p['id']; $opt['name']= $p['name']; $opt[]= $p['val']; $option[]= $opt; $product = $p['product']; $price = $p['price']; }else{ $opt = array(); $opt['option_id']= $p['id']; $opt['name']= $p['name']; $opt[]= $p['val']; $option[]= $opt; } } $sub=array(); $sub[]=$product; $sub[]=$price; $sub[]=$option; $prod[$rprod]=$sub;
il me sort
132 => Array (3)
0 => "a2"
1 => "10"
2 => Array (6)
0 => Array (3)
option_id => "61"
name => "couleur"
0 => "noir"
1 => Array (3)
option_id => "61"
name => "couleur"
0 => "blanc"
2 => Array (3)
option_id => "61"
name => "couleur"
0 => "bleu"
3 => Array (3)
option_id => "60"
name => "cadre"
0 => "oui"
4 => Array (3)
option_id => "61"
name => "couleur"
0 => "rouge"
5 => Array (3)
option_id => "60"
name => "cadre"
0 => "non"
129 => Array (3)
0 => "a1"
1 => "1"
2 => Array (6)
0 => Array (3)
option_id => "61"
name => "couleur"
0 => "noir"
1 => Array (3)
option_id => "61"
name => "couleur"
0 => "blanc"
2 => Array (3)
option_id => "61"
name => "couleur"
0 => "bleu"
3 => Array (3)
option_id => "60"
name => "cadre"
0 => "oui"
4 => Array (3)
option_id => "61"
name => "couleur"
0 => "rouge"
5 => Array (3)
option_id => "60"
name => "cadre"
0 => "non"
mais s'il faut que je refasse 2 fois ce foreach sur le résultat autant passer les requêtes dans les boucles
Hors ligne
hmm pas compris grand chose à ton code
voila comment je fais
$result = pwg_query($query); $products = array(); while ($row = pwg_db_fetch_assoc($result)) { if (!isset($products[ $row['product_id'] ])) { $products[ $row['product_id'] ] = array( 'product_id' => $row['product_id'], 'price' => $row['price'], 'product' => $row['product'], 'options' => array(), ); } if (!isset($products[ $row['product_id'] ]['options'][ $row['id'] ])) { $products[ $row['product_id'] ]['options'][ $row['id'] ] = array( 'opt_id' => $row['id'], 'name' => $row['name'], 'values' => array(), ); } $products[ $row['product_id'] ]['options'][ $row['id'] ]['values'][] = $row['val']; }
une seule boucle
Hors ligne