/** * MMULT * * @param array $matrixData1 A matrix of values * @param array $matrixData2 A matrix of values * @return array */ public static function MMULT($matrixData1, $matrixData2) { $matrixAData = $matrixBData = array(); if (!is_array($matrixData1)) { $matrixData1 = array(array($matrixData1)); } if (!is_array($matrixData2)) { $matrixData2 = array(array($matrixData2)); } try { $rowA = 0; foreach ($matrixData1 as $matrixRow) { if (!is_array($matrixRow)) { $matrixRow = array($matrixRow); } $columnA = 0; foreach ($matrixRow as $matrixCell) { if (!is_numeric($matrixCell) || $matrixCell === null) { return PHPExcel_Calculation_Functions::VALUE(); } $matrixAData[$rowA][$columnA] = $matrixCell; ++$columnA; } ++$rowA; } $matrixA = new PHPExcel_Shared_JAMA_Matrix($matrixAData); $rowB = 0; foreach ($matrixData2 as $matrixRow) { if (!is_array($matrixRow)) { $matrixRow = array($matrixRow); } $columnB = 0; foreach ($matrixRow as $matrixCell) { if (!is_numeric($matrixCell) || $matrixCell === null) { return PHPExcel_Calculation_Functions::VALUE(); } $matrixBData[$rowB][$columnB] = $matrixCell; ++$columnB; } ++$rowB; } $matrixB = new PHPExcel_Shared_JAMA_Matrix($matrixBData); if ($columnA != $rowB) { return PHPExcel_Calculation_Functions::VALUE(); } return $matrixA->times($matrixB)->getArray(); } catch (PHPExcel_Exception $ex) { var_dump($ex->getMessage()); return PHPExcel_Calculation_Functions::VALUE(); } }
/** * MMULT * * @param array $matrixData1 A matrix of values * @param array $matrixData2 A matrix of values * @return array */ public static function MMULT($matrixData1, $matrixData2) { $matrixAData = $matrixBData = array(); if (!is_array($matrixData1)) { $matrixData1 = array(array($matrixData1)); } if (!is_array($matrixData2)) { $matrixData2 = array(array($matrixData2)); } $rowA = 0; foreach ($matrixData1 as $matrixRow) { $columnA = 0; foreach ($matrixRow as $matrixCell) { if (is_string($matrixCell) || $matrixCell === null) { return PHPExcel_Calculation_Functions::VALUE(); } $matrixAData[$rowA][$columnA] = $matrixCell; ++$columnA; } ++$rowA; } try { $matrixA = new PHPExcel_Shared_JAMA_Matrix($matrixAData); $rowB = 0; foreach ($matrixData2 as $matrixRow) { $columnB = 0; foreach ($matrixRow as $matrixCell) { if (is_string($matrixCell) || $matrixCell === null) { return PHPExcel_Calculation_Functions::VALUE(); } $matrixBData[$rowB][$columnB] = $matrixCell; ++$columnB; } ++$rowB; } $matrixB = new PHPExcel_Shared_JAMA_Matrix($matrixBData); if ($rowA != $columnB || $rowB != $columnA) { return PHPExcel_Calculation_Functions::VALUE(); } return $matrixA->times($matrixB)->getArray(); } catch (Exception $ex) { return PHPExcel_Calculation_Functions::VALUE(); } }