2011-11-23 95 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