我有2个数组,用新格式表示矩阵:
$array1 = Array( Array(1, 2) , Array(3, 4) );
$array2 = Array( Array(0, 1) , Array(5, 6) );
这是我试过的:
$array = Array();
foreach ($array2 as $idB => $columnsB) {
for($i = 0; $i < count($columnsB); $i++) {
$array[$i][] = $columnsB[$i];
}
}
$productArray = Array();
for ($i = 0; $i < count($array1); $i++) {
for ($j = 0; $j < count($array); $j++) {
$productArray[$i][$j] = $array1[$i][$j] * $array[$j][$i];
}
}
预期结果:
$array = Array(0 => Array(10, 13), 1 => Array(20,27));
但是,它不正确,因为它只从第一个数组获取line1而从seond数组获取column2
答案 0 :(得分:0)
使用PHP 5.5的array_column()函数来简化对$ array2的访问:
$array1 = array( array(1, 2), array(3, 4) );
$array2 = array( array(0, 1), array(5, 6) );
$rows = count($array1);
$columns = count($array1[0]);
$result = [];
for($row = 0; $row < $rows; ++$row) {
$rowData = $array1[$row];
for($column = 0; $column < $columns; ++$column) {
$columnData = array_column($array2,$column);
$v = 0;
foreach($rowData as $key => $valueData) {
$v += $valueData * $columnData[$key];
}
$result[$row][$column] = $v;
}
}
如果您没有PHP 5.5
function array_column($array, $column) {
return array_map(
function($value) use ($column) {
return $value[$column];
},
$array
);
}
答案 1 :(得分:0)
您需要额外的循环,以对单个产品求和:
for ($i = 0; $i < count($array1); $i++) {
for ($j = 0; $j < count($array); $j++) {
for ($k = 0; $k < count ($array[$j]); $k++) {
$productArray[$i][$j] += $array1[$i][$k] * $array[$j][$k];
}
}
}
答案 2 :(得分:-1)
function matrixmult($m1,$m2){
$r=count($m1);
$c=count($m2[0]);
$p=count($m2);
if(count($m1[0])!=$p){throw new Exception('Incompatible matrixes');}
$m3=array();
for ($i=0;$i< $r;$i++){
for($j=0;$j<$c;$j++){
$m3[$i][$j]=0;
for($k=0;$k<$p;$k++){
$m3[$i][$j]+=$m1[$i][$k]*$m2[$k][$j];
}
}
}
return($m3);
}
输出:
print_r(matrixmult($array, $array1));
Array ( [0] => Array ( [0] => 10 [1] => 13 ) [1] => Array ( [0] => 20 [1] => 27 ) )