/ / PHP - Wielowymiarowe dodawanie tablic - php, tablice, tablice wielowymiarowe

PHP - Multidimensional Array Adding - php, tablice, tablica wielowymiarowa

Muszę zsumować wszystkie wartości w tablicy wielowymiarowej na podstawie ich item_id. Mój kod:

$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);

Wydajność:

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)

Struktura tablicy to item_ID => QTY_OrDER.

Mój obecny krok polega na iteracji po każdej tablicy i zsumowaniu wszystkich wartości dla unikalnych kluczy pozycji.

Czy powinienem połączyć / scalić wszystkie tablice w jedną dużą tablicę, czy po prostu zrobić to rekurencyjnie na podstawie klucza?

Dzięki.

Odpowiedzi:

0 dla odpowiedzi № 1

Wygląda na to, że jest tylko dwuwymiarowy, więc rekurencja prawdopodobnie nie jest konieczna. Możesz po prostu zrobić podwójny foreach aby uzyskać sumy.

$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;
}
}
}

W zależności od tego, co powiedziałeś w pytaniu, może tobyć jak to, co już robisz, ale takiego podejścia użyłbym. Nie sądzę, aby połączenie wszystkich tablic przyniosło wiele korzyści.

Z drugiej strony, jeśli wszystkie te wartości pochodzą z bazy danych, myślę, że bardziej efektywne byłoby napisanie zapytania w celu obliczenia sumy niż robienie tego w PHP.