两个数组操作每个列的值

时间:2016-03-17 14:22:31

标签: php arrays matrix multidimensional-array

我在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

谢谢。

1 个答案:

答案 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);

Working Example