2017-11-23 4 views
-1

Ich habe ein assoziatives Array, und ich möchte die duplizierten Werte aufgrund der doppelten Elemente in der Schlüssel zusammenzufassen ..PHP assoziatives Array Filterung

Zur besseren Erläuterung:

array:6 [ 
    0 => array:4 [ 
    "itemsName" => "H&M Chemise#15 M.Colors Orange x Grey '17(red-l)" 
    "itemsQuantity" => 3 
    "itemsCode" => 101 
    "itemsBarcode" => "101|60|78" 
    ] 

    1 => array:4 [ 
    "itemsName" => "H&M Chemise#15 M.Colors Orange x Grey '17(green-l)" 
    "itemsQuantity" => 1 
    "itemsCode" => 101 
    "itemsBarcode" => "101|15|78" 
    ] 

    2 => array:4 [ 
    "itemsName" => "Polo Cap Multi Colors B-Logo(red-l)" 
    "itemsQuantity" => 2 
    "itemsCode" => 104 
    "itemsBarcode" => "104|60|78" 
    ] 

    3 => array:4 [ 
    "itemsName" => "Polo Cap S-Logo White(green-l)" 
    "itemsQuantity" => 1 
    "itemsCode" => 107 
    "itemsBarcode" => "107|15|78" 
    ] 

    4 => array:4 [ 
    "itemsName" => "H&M Chemise#15 M.Colors Orange x Grey '17(green-l)" 
    "itemsQuantity" => 2 
    "itemsCode" => 101 
    "itemsBarcode" => "101|15|78" 
    ] 

    5 => array:4 [ 
    "itemsName" => "H&M Chemise#15 M.Colors Orange x Grey '17(red-l)" 
    "itemsQuantity" => 3 
    "itemsCode" => 101 
    "itemsBarcode" => "101|60|78" 
    ] 
] 

Problem:

Sie finden, dass der Barcode 01 | 15 | 78 in der Array-Index dupliziert 4 und 1 so möchte ich die Mengen in Index 4 und 1 zusammenzufassen und ihnen ein einzelnes Array zu machen, und es wird:

[ "itemsName" => "H&M Chemise#15 M.Colors Orange x Grey '17(green-l)" "itemsQuantity" => 3 "itemsCode" => 101 "itemsBarcode" => "101|15|78" ]

+0

Welchen Code haben Sie bisher ausprobiert? –

Antwort

2

Nehmen wir an, Ihr Array wurde unter der Variablen $cart gespeichert.

Sie können die PHP-Funktion array_reduce verwenden, um jedes Element Ihres Arrays zu durchlaufen, es zu filtern und die Werte anderer Indizes zu bearbeiten.

$cart = array_reduce($cart, function($newCart, $item){ 
    $barCode = $item['itemsBarcode']; 
    if (array_key_exists($barCode, $newCart)) { 
     $newCart[$barCode]['itemsQuantity'] += $item['itemsQuantity']; 
    } else { 
     $newCart[$barCode] = $item; 
    } 
    return $newCart; 
}, []); 

Wenn Sie einfache numerische Array-Schlüssel haben müssen (Schleife es durch eine for-Schleife zum Beispiel) verwenden $cart = array_values($cart); danach.