2011-11-23 68 views
0

我與這些值的數組:乘法* =

array 
    0 => 
    array 
     0 => int 1 
     1 => float 0.125 
     2 => float 0.5 
     3 => float 3 
    1 => 
    array 
     1 => int 1 
     2 => float 5 
     3 => float 7 
     0 => float 8 
    2 => 
    array 
     2 => int 1 
     3 => float 3 
     0 => float 2 
     1 => float 0.2 
    3 => 
    array 
     3 => int 1 
     0 => float 0.33333333333333 
     1 => float 0.14285714285714 
     2 => float 0.33333333333333 

,我想每個組的每一行的像乘法:

1*0.125*05*3 

我想這個代碼:

$final= array_fill(0, count($matrix), 0); 
for ($i = 0; $i < count($matrix); $i++) { 
    $a = 1; 
    for ($j = 0; $j < count($matrix)-1; $j++) { 
     $final[$i] *= $matrix[$i][$j]*$matrix[$i][$a]; 
     $a++; 
    } 
} 

但我得到0爲每個乘法行。

的代碼+ =效果很好,但:

1*0.125*05*3 = 0.1875 (this is the objective) 

1*0.125+0.125*0.5+*0.5*3 = 16875 

任何想法有什麼不同?

回答

2

難道你們就不能只是做

$final = array(); 
foreach($matrix as $arr) { 
    $final[] = array_product($arr); 
} 

print_r($final); 

其中結果爲

Array ([0] => 0.1875 [1] => 280 [2] => 1.2 [3] => 0.015873015873015) 

或者,如果您想繼續按照自己的方式操作:

$final= array_fill(0, count($matrix), 1); 
for ($i = 0; $i < count($matrix); $i++) { 
    for ($j = 0; $j < count($matrix); $j++) { 
     $final[$i] *= $matrix[$i][$j]; 
    } 
} 

我刪除了-1,因爲這意味着它錯過了最後一個元素採取1*5*8*7例如。你的方式= 40,因爲7從未乘以。以上輸出結果相同。

+0

上帝右邊的兩個元素之一,這完美的作品。謝謝! –

+0

沒問題。還添加了你的代碼輸出相同的結果,但不是可讀的imo版本:) –

1

的乘法中性元素爲1,不爲0你用零本聲明

$final= array_fill(0, count($matrix), 0); 

,顯然盡顯你的最後一個數組,當你做

$final[$i] *= $matrix[$i][$j]; 

一切也將爲零。因此,你有這個一個替換的第一行:

$final= array_fill(0, count($matrix), 1); 
+0

是的,工作,但可能有另一個錯誤。例如8 * 1 * 5 * 7應該是280,我得到了1400. –

+0

@loops因爲每次在J循環中乘以3個數字可能不是您想要的。擺脫* = –

0

0 *什麼是0。您的初始化數組全0