2016-04-23 9 views
-2

Ich arbeite mit einem mehrdimensionalen array.i möchte dieses Array von brand_id und cat_id gruppieren. Im folgenden Array [0], [1] und [2], [3] haben ähnliche brand_ids und cat_ids.i möchten product_ids entfernen und möchten die Summe von qtys in diesem Objekt erhalten.PHP: Funktion zum Gruppieren von Objekt-Array von Objekten Element

Array (
     [0] => stdClass Object 
     ( 
     [brand_id] => 1 
     [cat_id] => 1 
     [qty] => 150 
     [product_id] => 1 
     ) 
     [1] => stdClass Object 
     ( 
     [brand_id] => 1 
     [cat_id] => 1 
     [qty] => 250 
     [product_id] => 5 
     ) 
     [2] => stdClass Object 
     (
     [brand_id] => 4 
     [cat_id] => 35 
     [qty] => 100 
     [product_id] => 322 
     ) 
     [3] => stdClass Object 
     ( 
     [brand_id] => 4 
     [cat_id] => 35 
     [qty] => 200 
     [product_id] => 321 
     ) 
     ) 

i möge Array neu anordnen ähnlichen

Array (
      [0] => stdClass Object 
      ( 
      [brand_id] => 1 
      [cat_id] => 1 
      [qty] => 400 
      ) 

      [1] => stdClass Object 
      (
      [brand_id] => 4 
      [cat_id] => 35 
      [qty] => 300 
      [product_id] => 322 
      ) 
      ) 
+2

ich Sie bei der Abfrage aussehen vorschlagen, die dieses Array erstellt, anstatt mit seinen Ergebnissen Hantieren – RiggsFolly

+0

Was http://php.net/manual/en/function. usort.php – ceadreak

+0

@ceadreak 'usort' dient zum Umordnen eines Arrays, es führt keine Elemente zusammen. – Barmar

Antwort

1

Erstellen einen 2-dimensionalen assoziativen Array, dessen Schlüssel die brand_id und cat_id, und Werte werden die Objekte mit der qty Eigenschaft die Gesamtmenge enthält.

$result = array(); 
foreach ($products as $p) { 
    if (isset($result[$p->brand_id][$p->cat_id])) { 
     $result[$p->brand_id][$p->cat_id]->qty += $p->qty; 
    } else { 
     $clone = clone $p; 
     unset ($clone->product_id); 
     $result[$p->brand_id][$p->cat_id] = $clone; 
    } 
} 

Anschließend können Sie das Array mit array_walk_recursive glätten.

$return = array(); 
array_walk_recursive($result, function($a) use (&$return) { $return[] = $a; }); 

habe ich diesen Code aus How to Flatten a Multidimensional Array?

+0

danke viel sir ............ –

Verwandte Themen