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 № 1Wyglą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.