2014-12-16 4 views
-3

Я знаю, что нет необходимости определять переменные и массивы перед их использованием в PHP. Но я столкнулся с «неопределенная переменная MAT1» и ошибки «неопределенная переменная MAT2», когда я запускаю следующий код:Почему я получаю Undefined Variable errors?

for($i=0;$i<3;$i++) 
{ 
    for($j=0;$j<3;$j++) 
    { 
     $ans[$i][$j] = 0; 
     for($k=0;$k<3;$k++) 
     { 
      $ans[$i][$j] = $ans[$i][$j] + $mat1[$i][$k]*$mat2[$k][$j]; 
     } 
    } 
} 
var_dump($ans); 

Я попытался определить их следующие 2 строки:

$mat1=array(array()); 
$mat2=array(array()); 

Но ошибки были изменены на ошибки «Неопределенное смещение: ...». Я что-то пропустил в своем коде ?!

+0

Похоже, вы пытаетесь умножить некоторые матрицы вместе (т. Е. Точечный продукт.) Итак, где вы определили две свои матрицы: '$ mat1' и' $ mat2'? Вы знаете, как должны выглядеть ваши матрицы? – sjagr

+0

Также ответы на этот вопрос являются абсолютной катастрофой - я полагаю, что в вопросе недостаточно информации для правильного ответа OP, и поэтому ** следует избегать ** ответов **, если он не объяснит полностью, почему существует неопределенная ошибка смещения и то, как ее можно предотвратить, поскольку это единственное, что действительно может быть достигнуто с данной информацией. – sjagr

+0

Я не понимаю причину задвижки. Неправильно ли задавать то, что я уже не знаю ?! Существует пословица, в которой говорится: «Неплохо, если вы что-то не знаете, это плохо, если вы не задаете свои вопросы. – KarenV

ответ

1

Почему я получаю Undefined Ошибки переменной?

Потому что вы ничего не определили.

Просто используйте

$mat1 = $mat2 = array(
      0 => array(
        0 => 1, 
        1 => 1, 
        2 => 1, 
        3 => 1, 
        4 => 1, 
        5 => 1, 
       ), 
      1 => array(
        0 => 2, 
        1 => 2, 
        2 => 2, 
        3 => 2, 
        4 => 2, 
        5 => 2, 
        ), 
      2 => array(
        0 => 3, 
        1 => 3, 
        2 => 3, 
        3 => 3, 
        4 => 3, 
        5 => 3, 
      ) 
    ); 

И проверить это

0

У вас все еще должны быть данные, чтобы использовать массивы. Если mat1 - просто пустой массив, тогда попытка доступа к $ mat1 [1] даст вам эту неопределенную ошибку смещения

1

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

Другое дело, что вместо $mat1=array(array()) вы можете просто определить $mat1=array(), это также будет работать и для многомерных массивов.

Так , если ваш массив фактически не имеет значений в этих индексах (даже если пустые значения), вы получите неопределенную ошибку смещения.

Смежные вопросы