2016-04-17 18 views
0

Es Zusammengefasst ist ein Problem:die Werte von zwei Arrays in php

Nach Ausfüllen eines Formulars einreichen ich die indiziertes Array als SQL-Abfrage-Ergebnis erhalten und das Ziel ist, die jeweils nächste Array-Werte mit den Werten der vorher zusammenzufassen erhielt Arrays und setzen die Summen in Folge Array

Beispiel:

// 1st query result 
$product_amount = [0 => 0.36, 
        1 => 0.14, 
        2 => 0.42] 

// 2nd query result 
$product_amount = [0 => 0.28, 
        1 => 0.12, 
        2 => 0.40] 

// n-th query result 
$product_amount = [0 => 0.16, 
        1 => 0.14, 
        2 => 0.42] 
// the sum 
$total = [0 => 0.80, 
      1 => 0.40, 
      2 => 1.24] 

Wie es zu tun?

Der Code, der ein Array erstellt:

function doseCount($num){ 
    return ($num/100) * intval($_POST['portion']); //getting multiplier for productAmount() function 
} 

function productAmount(){ 
    global $link; //connection to the MySQL server 
    if(isset($_POST['product'])){ 
     $product_amount_query = 'SELECT va.vitamin_a, va.vitamin_b1, va.vitamin_b2, va.vitamin_b3, va.vitamin_b5, 
       va.vitamin_b6, va.vitamin_bc_b9, va.vitamin_b12, va.vitamin_c, va.vitamin_d, va.vitamin_e, va.biotin, va.vitamin_k, 
       va.flavonoids, va.lipoic_acid FROM products_list p, vitamins_amount va WHERE p.id = va.product_id AND p.name = ?'; 

     $product_amount_stmt = mysqli_prepare($link, $product_amount_query); 
     mysqli_stmt_bind_param($product_amount_stmt, "s", $_POST['product']); 
     mysqli_stmt_execute($product_amount_stmt); 

     $result = mysqli_stmt_get_result($product_amount_stmt); 

     $product = mysqli_fetch_array($result, MYSQLI_NUM); 

     return $product_final_result = array_map('doseCount', $product); 
     mysqli_stmt_close($product_amount_stmt); 
     mysqli_close($link); 
    } 
} 

$product_amount = productAmount(); 

Nach $ product_amount Array erhält neue Daten vorlegen und dieser neue Wert muss mit früheren summiert werden.

+0

Wenn ich richtig bin; Sie sollten das überprüfen. Dies könnte Ihnen helfen. http://php.net/manual/en/class.multipleiterator.php –

Antwort

0

Dieses Problem kann mit der richtigen Verwendung von Sitzungen gelöst werden:

if (empty($_SESSION['product_amount'])){ 
    $_SESSION['product_amount'] = $product_amount; 
}else{ 
    foreach ($_SESSION['product_amount'] as $key => $value) { 
     $_SESSION['product_amount'][$key] += $product_amount[$key]; 
    } 
} 

Besonderer Dank geht an Mawia HL für seine Hilfe.

0

Sie können dies erreichen, indem Sie array_map und array_sum kombinieren. Wenn Sie mit PHP 5.6 oder höher, die Sie sollten Sie so etwas schreiben könnte:

$total = array_map(function (...$vals) { 
    return array_sum($vals); 
}, ...$results); 

Unter der Annahme, dass $results alle Ihre $product_amount Arrays enthält.

Wenn Sie $total schrittweise statt geben alle Abfrageergebnisse auf einmal bauen möchten, können Sie dies tun:

// Initialize $total array 
$total = [0, 0, 0]; 

// Update $total for each query 
$total = array_map(function (...$vals) { 
    return array_sum($vals); 
}, $total, $product_amount); 
Verwandte Themen