我有一个包含这些值的数组:
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
有什么想法吗?
答案 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。