#1 2014-02-24 13:46:38

Miklfe
Membre
Sarthe
2010-11-13
364

Regroupement dan un array

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

#2 2014-02-24 13:50:39

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Regroupement dan un array

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

#3 2014-02-24 13:50:50

k5
Équipe Piwigo
La reppe
2014-01-26
1351

Re: Regroupement dan un array

bonjour,
en concatenant peut etre ?

Cordialement
k5


Piwigo 14.4 VM alpneLinux php 8.4
Piwigo 14.4 php 8.4 -- 8.4 mysql -- ImageMagick 7.1.1.34

Hors ligne

#4 2014-02-24 13:57:40

Miklfe
Membre
Sarthe
2010-11-13
364

Re: Regroupement dan un array

en fait j'arrive à le faire au premier niveau  (product_id)

Code:

    $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

#5 2014-02-24 14:05:21

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Regroupement dan un array

hmm pas compris grand chose à ton code

voila comment je fais

Code:

$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

#6 2014-02-24 14:11:48

Miklfe
Membre
Sarthe
2010-11-13
364

Re: Regroupement dan un array

J'étais vraiment barré à l'autre bout du monde, complètement à coté de mes pompes
Un grand merci à toi

Hors ligne

#7 2014-02-25 10:59:11

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Regroupement dan un array

ya des jours comme ça :-)

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact