/ / PHP - Aggiunta di array multidimensionali - php, array, array multidimensionale

PHP - Aggiunta di array multidimensionali - php, array, array multidimensionale

Ho bisogno di sommare tutti i valori in un array multi-dimensionale, in base al loro item_id. Il mio codice:

$result = $db->test_order();

/**
* @array $result   = all menuitems from query
* @array $newArray = new array without any empty arrays
*/
foreach ($result as $r => $i){
if (!empty($i["Customizations"])){
$newArray[] = $i;
}
}

/**
* @array $decoded_array = new, multi-dimentional, array with item_id as KEY and qty as VALUE
*/
foreach ($newArray as $r => $i) {
$a = trim($i["Customizations"]);
$decoded_array[] = json_decode($a, TRUE);
}

var_dump($decoded_array);

Produzione:

array (size=18545)
0 =>
array (size=7)
5 => string "1" (length=1)
73 => string "1" (length=1)
54 => string "1" (length=1)
63 => string "1" (length=1)
87 => string "1" (length=1)
64 => string "1" (length=1)
34 => string "1" (length=1)
1 =>
array (size=7)
70 => string "1" (length=1)
45 => string "1" (length=1)
48 => string "1" (length=1)
49 => string "1" (length=1)
8 => string "1" (length=1)
52 => string "1" (length=1)
93 => string "1" (length=1)
2 =>
array (size=2)
33 => string "1" (length=1)
90 => string "1" (length=1)
3 =>
array (size=6)
5 => string "1" (length=1)
27 => string "1" (length=1)
8 => string "1" (length=1)
104 => string "1" (length=1)
52 => string "1" (length=1)
56 => string "1" (length=1)
4 =>
array (size=1)
108 => string "1" (length=1)
5 =>
array (size=6)
5 => string "2" (length=1)
70 => string "3" (length=1)
8 => string "1" (length=1)
71 => string "1" (length=1)
52 => string "3" (length=1)
6 => string "1" (length=1)

La struttura dell'array è item_ID => QTY_Ordered.

Il mio attuale passo è quello di scorrere ogni array e sommare tutti i valori per le chiavi degli oggetti univoci.

Dovrei unire / unire tutti gli array in un unico array o semplicemente farlo ricorsivamente in base alla chiave?

Grazie.

risposte:

0 per risposta № 1

Sembra che sia solo bidimensionale, quindi la ricorsione probabilmente non è necessaria. Puoi solo fare un doppio foreach per ottenere i totali.

$totals = array();

foreach ($decoded_array as $order) {
foreach ($order as $item_id => $quantity) {
if (isset($totals[$item_id])) {
$totals[$item_id] += $quantity;
} else {
$totals[$item_id] = $quantity;
}
}
}

Sulla base di ciò che hai detto nella domanda, questo potrebbeessere come quello che stai già facendo, ma questo è l'approccio che userei. Non vedo che ci sarebbe molto beneficio per unire tutti gli array insieme.

D'altra parte, se tutti questi valori provengono dal tuo database, penso che sarebbe più efficiente scrivere una query per calcolare i totali piuttosto che farlo con PHP.