2011-01-07 34 views
4

我有一個多維數組如下:多維數組,乘,除在PHP

Array(
    [0] => Array 
     (
      [name] => item 1 
      [quantity] => 2 
      [price] => 20.00 
     ) 

    [1] => Array 
     (
      [name] => item 2 
      [quantity] => 1 
      [price] => 15.00 
     ) 

    [2] => Array 
     (
      [name] => item 3 
      [quantity] => 4 
      [price] => 2.00 
     ) 

) 

我需要所有這些項目的「總計」。現在清楚,我可以做得到這些如下:

$grand_total = 0; 
foreach ($myarray as $item) { 
    $grand_total += $item['price'] * $item['quantity']; 
} 
echo $grand_total; 

我的問題是 - 可以這樣在使用任何PHP中的數組函數的代碼少行做了什麼?

回答

6

沒有。你將不得不定義一個回調函數來使用array_reduce。這甚至會變得更長,但使代碼更好的可重用。

編輯:沒有寫PHP很長一段時間,但這個應該這樣做:如果你正在使用PHP

function sum_total_price_of_items($sum, $item) { 
    return $sum + $item['price'] * $item['quantity'] 
} 
echo array_reduce($myarray, "sum_total_price_of_items", 0) 
1

> = 5.3(需要lambda函數),那麼array_reduce解決方案將縮短:

$input = array(
    array(
     'name' => 'item 1', 
     'quantity' => '2', 
     'price' => 20.00, 
    ), 
    array(
     'name' => 'item 2', 
     'quantity' => '1', 
     'price' => 15.00, 
    ), 
    array(
     'name' => 'item 3', 
     'quantity' => '4', 
     'price' => 2.00, 
    ), 
); 

$total = array_reduce($input, 
         function($subtotal, $row) { 
          return $subtotal + $row['quantity'] * $row['price']; 
         }); 
1

我喜歡這一個:

function GrandTotal($temb, $grand=0) { 
    return ($current=array_pop($temb)) ? GrandTotal($temb, $grand + $current['price'] * $current['quantity']) : $grand; 
} 

echo GrandTotal($myarray); 
+0

PHP是否優化尾遞歸函數? – mschneider 2011-01-07 15:04:36