1

私はクラスを使用して行列を使用して計算を行っています。この場合は、次のようになります。各列の合計を取得します。

合計の出力は正しく、通知を非表示にすると問題は解決しますが、論理的には修正を好みます。

PHP 5.3では、この関数にいくつかの通知があります。

Notice: Undefined offset: 0 
Notice: Undefined offset: 0 
Notice: Undefined offset: 1 

脚本

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

これらの通知を修正するアイデアはありますか?

ありがとう

4

1 に答える 1

3

はい、数値を追加する変数に初期値がないため、通知が発生します。番号を追加する前に、番号が存在するかどうかを確認して初期化する必要があります。(これによって結果が改善されることはありませんが、変数を初期化することをお勧めします)。

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
  • 機会があれば、はるかに優れた解決策は、配列に0を事前に入力することです。array_fill()うまく仕事をします。
于 2011-11-19T19:11:33.687 に答える