2016-04-17 48 views
0

兩個數組的值有一個問題:總結在PHP

提交表單後,我收到索引數組作爲SQL查詢結果和目標是與先前的值來總結每個下一數組值接受陣列並把資金投入結果數組

例子:

// 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] 

怎麼辦呢?

創建數組的代碼:

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

提交後$ product_amount陣列獲取的新數據和新值必須與以前的相加。

+0

如果我是正確的;你應該檢查一下。這可能會幫助你。 http://php.net/manual/en/class.multipleiterator.php –

回答

0

這個問題可以通過正確使用會話來解決特別感謝Mawia HL的幫助。

0

您可以通過組合array_maparray_sum來完成此操作。如果你使用PHP 5.6或更高,你應該,你可以寫這樣的事情:

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

假設$results包含所有$product_amount陣列。

如果你想建立$total增量而不是將所有查詢結果一次,你可以這樣做:

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

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

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