уведомления при обновлении версии php - PullRequest
1 голос
/ 19 ноября 2011

Я использую класс, чтобы сделать некоторые вычисления с матрицами, в этом случае: Получить сумму каждого столбца.

Вывод суммы правильный, и если я скрываю уведомления, проблема решена, но логически я предпочитаю исправление.

В PHP 5.3 я получаю некоторые уведомления в этой функции:

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;
    }

Матрица:

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

и

 $this->get_num_columns() // 2

Есть идеи исправить эти уведомления?

спасибо

1 Ответ

3 голосов
/ 19 ноября 2011

Да, уведомление происходит потому, что в переменных, к которым вы добавляете числа, нет начального значения.Вы должны проверить, существует ли номер и инициализировать его, прежде чем добавить номер к нему.(Обратите внимание, что это не улучшит ваш результат, но это хорошая практика для инициализации переменных).

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, а не matrix.
  • Если у вас есть такая возможность, гораздо лучшим решением будет предварительное заполнение массива нулями.array_fill() отлично справляется со своей работой.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...