Intenta probar con estas funciones, esta divido por partes para que entiendas mejor.
// Valida que los arreglos tengan el mismo tamaño.function __val($a, $b) { $tam_a = count($a); $tam_b = count($b); if($tam_a != $tam_b) { trigger_error("ops! Los tamaños deben ser iguales.", E_USER_ERROR); }}// Suma los valores de dos arreglos.function __sum($a, $b) { __val($a, $b); $c = []; foreach($a as $i => $a_x) { $b_x = $b[$i]; $c[] = $a_x + $b_x; } return $c; }// Suma los arreglos contenidos en los arreglos bidimensionales.function __sum__matr($a, $b) { __val($a, $b); $c = []; foreach($a as $i => $a_x) { $b_x = $b[$i]; $c[] = __sum($a_x, $b_x); } return $c;}$q = [[2, 4, 8], [1, 3, 5]];$z = [[1, -1, 1], [0, 1, -2]];print_r(__sum__matr($q, $z));