3v4l.org

run code in 300+ PHP versions simultaneously
<?php $data = [ 'Orders' => [ [ 'transaction_id' => '78078', 'date' => 1616277653, 'currency' => 'EUR', 'items' => [ ['title' => 'Title 1', 'quantity' => 200, 'price' => 2.1, 'sku' => '1T.810BK'], ['title' => 'Title 2', 'quantity' => 250, 'price' => 1.78, 'sku' => '1090.005BK'], ], ], [ 'transaction_id' => 78079, 'date' => 1616597838, 'currency' => 'EUR', 'items' => [ ['title' => 'title 3', 'quantity' => 3, 'price' => 118.3, 'sku' => '1.DIYBOX.ULT.638RE'], ], ], [ 'transaction_id' => 78080, 'date' => 1616598322, 'currency' => 'EUR', 'items' => [ ['title' => 'title 2', 'quantity' => 300, 'price' => 1.78, 'sku' => '1090.005BK'], ], ] ] ]; $result = []; foreach ($data['Orders'] as $order) { foreach ($order['items'] as $item) { $result[$item['sku']] = ($result[$item['sku']] ?? 0) + $item['quantity']; } } var_export($result); echo "\n===\n"; var_export( array_column(array_merge_recursive(... array_column($data['Orders'], 'items')), 'quantity', 'sku') ); echo "\n===\n"; $sku = ''; $qt = -1; $result = []; array_walk_recursive($data, function($v, $k) use(&$sku,&$qt,&$result) { if($k === 'quantity'){ if($sku !== ''){ $result[ $sku ] = $v; $sku = ''; }else { $qt = $v; } }else if($k === 'sku'){ if($qt !== -1){ $result[ $v ] = $qt; $qt = -1; }else{ $sku = $v; } } }); var_export($result);

preferences:
32.97 ms | 407 KiB | 5 Q