i am using a class to make some calculations with matrices, in this case: Get the sum of each column.
The sum output is correct, and if I hide the notices, the problem is solved, but logically, i prefer the correction.
In PHP 5.3 I get some notices in this function:
Notice: Undefined offset: 0
Notice: Undefined offset: 0
Notice: Undefined offset: 1
script
function sum()
{
foreach($this->numbers as $i => $rows)
{
foreach($rows as $j => $number)
{
$this->sum[0][$j] += $number; //notices here
}
}
$the_sum = new matrix($this->sum, 1, $this->get_num_columns());
return $the_sum;
}
Matrix:
1 | 4
0.25 | 1
var_dump($this->numbers);
array
0 =>
array
0 => int 1
1 => float 4
1 =>
array
0 => float 0.25
1 => int 1
and
$this->get_num_columns() // 2
Any idea to correct these notices ?
thanks
Yes, the notice occurs because there is no initial value in the variables you are adding numbers to. You should check if the number exists and initialize it before you add a number to it. (Note, this won't improve your result, but it is good practice to initialize variables).
function sum()
{
foreach($this->numbers as $i => $rows)
{
foreach($rows as $j => $number)
{
if (!isset($this->sum[0][$j])) $this->sum[0][$j] = 0;
$this->sum[0][$j] += $number; //no notices here
}
}
$the_sum = new matrix($this->sum, 1, $this->get_num_columns());
return $the_sum;
}
Matrix
and not matrix
.array_fill()
does the job nicely.