我在php中遇到矩阵运算问题。
我有两个多维数组
array1=
Array([0] => Array([0] => 5000, [1] => 6, [2] => 325, [3] => 3, [4] => 3, [5] => 517000000)
[1] => Array([0] => 20000, [1] => 5, [2] => 217, [3] => 5, [4] => 3, [5] => 1692000000)
[2] => Array([0] => 12150, [1] => 3, [2] => 254, [3] => 4, [4] => 4, [5] => 1370520000)
[3] => Array([0] => 4200, [1] => 4, [2] => 351, [3] => 3, [4] => 2, [5] => 394800000)
[4] => Array([0] => 24700, [1] => 7, [2] => 237, [3] => 3, [4] => 4, [5] => 2089620000)
[5] => Array([0] => 18500, [1] => 5, [2] => 314, [3] => 5, [4] => 4, [5] => 1739000000)
[6] => Array([0] => 12150, [1] => 5, [2] => 247, [3] => 3, [4] => 3, [5] => 1142100000)
[7] => Array([0] => 15000, [1] => 5, [2] => 307, [3] => 4, [4] => 3, [5] => 1410000000)
[8] => Array([0] => 10000, [1] => 4, [2] => 231, [3] => 4, [4] => 4, [5] => 940000000)
[9] => Array([0] => 27500, [1] => 6, [2] => 347, [3] => 5, [4] => 4, [5] => 2147483647))
表格显示是
5000 6 325 3 3 517000000
20000 5 217 5 3 1692000000
12150 3 254 4 4 1370520000
4200 4 351 3 2 394800000
24700 7 237 3 4 2089620000
18500 5 314 5 4 1739000000
12150 5 247 3 3 1142100000
15000 5 307 4 3 1410000000
10000 4 231 4 4 940000000
27500 6 347 5 4 2147483647
,第二个数组是
array2=
Array(
[0] => Array
(
[0] => 27500
[1] => 7
[2] => 351
[3] => 3
[4] => 4
[5] => 394800000
))
然后,我想为每一列做数学运算。
对于第0,1,2,4列,操作是array1 [] [] / array2 [] []。
第3列和第5列的操作是array2 [] [] / array1 [] []
我该怎么做?
我尝试过这个功能:
function perkalian_matriks($array1, $array2) {
$result= array();
for ($i=0; $i<sizeof($array1); $i++) {
for ($j=0; $j<sizeof($array2[0]); $j++) {
$temp = 0;
$temp1 = 0;
$temp2 = 0;
for ($k=0; $k<sizeof($array2); $k++) {
if(isset($array1[$i][3]) || isset($array1[$i][5])){
$temp1 += ($array2[0][$j]/$array1[$i][$j])/2;
}else{
$temp2 += $array1[$i][$j]/$array2[0][$j];
}
$temp += $array1[$i][$j]/$array2[0][$j];
}
$result[$i][$j] = $temp;
$result1[$i][$j] = $temp1;
$result2[$i][$j] = $temp2;
}
}
return $result;
return $temp;
return $result1;
return $result2;
}
但我预期的最终结果是
0.181818 0.857143 0.925926 1 0.75 0.763636
0.727273 0.714286 0.618234 0.6 0.75 0.233333
0.441818 0.428571 0.723647 0.75 1 0.288066
0.152727 0.571429 1 1 0.5 1
0.898182 1 0.675214 1 1 0.188934
0.672727 0.714286 0.894587 0.6 1 0.227027
0.441818 0.714286 0.703704 1 0.75 0.345679
0.545455 0.714286 0.874644 0.75 0.75 0.28
0.363636 0.571429 0.65812 0.75 1 0.42
1 0.857143 0.988604 0.6 1 0.183843
谢谢。
答案 0 :(得分:1)
首先这样做:
return $result;
return $temp;
return $result1;
return $result2;
每次只执行return $result;
,所以没有任何意义。
如果在函数内调用,则立即返回语句 结束当前函数的执行,并将其参数作为 函数调用的值。 (来自php doc)
第二个阵列不需要是矩阵。
无论如何,你可以使用2个嵌套循环来实现你所需要的:
$array1=
array(array(5000,6, 325, 3, 3, 517000000),
array( 20000, 5, 217, 5, 3, 1692000000),
array( 12150, 3, 254, 4, 4, 1370520000),
array( 4200, 4, 351, 3, 2, 394800000),
array( 24700, 7, 237, 3, 4, 2089620000),
array( 18500, 5, 314, 5, 4, 1739000000),
array( 12150, 5, 247, 3, 3, 1142100000),
array( 15000, 5, 307, 4, 3, 1410000000),
array( 10000, 4, 231, 4, 4, 940000000),
array( 27500, 6, 347, 5, 4, 2147483647));
$array2=array(27500,
7,
351,
3,
4,
394800000);
$action1 = array(0,1,2,4);
$action2 = array(3,5);
$result = array();
foreach($array1 as $rowNum => $row){
$result[] = array();
foreach($row as $colNum => $col){
if(in_array($colNum,$action1))
$result[$rowNum][] = $col/$array2[$colNum];
else if(in_array($colNum,$action2)){
$result[$rowNum][] = $array2[$colNum]/$col;
}
}
}
echo var_dump($result);