乘以* =

时间:2011-11-23 00:48:41

标签: php arrays matrix

我有一个包含这些值的数组:

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

有什么想法吗?

3 个答案:

答案 0 :(得分: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从未成倍增加。以上输出相同的结果。

答案 1 :(得分:1)

乘法的中性元素是1,而不是0.你用这个语句用零填充你的最终数组

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

,显然,当你做

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

一切也将为零。因此,您必须用这一行替换第一行:

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

答案 2 :(得分:0)

0 *任何值为0.您将数组初始化为全0。