Я новичок в php, поэтому я пытался написать программу, которая добавляет две матрицы 3x3. Я получаю ошибку неопределенного символа несколько раз в PHP-коде.
Есть ли другой способ определения многомерных массивов в php?
Уже существует множество программ, позволяющих решить эту проблему для одномерного массива. Это значения по умолчанию для жесткого кодирования. Присвоение значений по умолчанию каждому элементу в массиве займет много времени.
Вот мой код:
<html>
<head></head>
<body>
<form action = "matAdd.php" method = "post">
Enter values in first matrix:
<table cellpadding=10 cellspacing=10>
<tr>
<td>
<table>
<tr><td colspan = "3">Matrix 1</td>
</tr>
<tr>
<td><input type = "number" name = "m00" size = "3" required/></td>
<td><input type = "number" name = "m01" size = "3" required/></td>
<td><input type = "number" name = "m02" size = "3" required/></td>
</tr>
<tr>
<td><input type = "number" name = "m10" size = "3" required/></td>
<td><input type = "number" name = "m11" size = "3" required/></td>
<td><input type = "number" name = "m12" size = "3" required/></td>
</tr>
<tr>
<td><input type = "number" name = "m20" size = "3" required/></td>
<td><input type = "number" name = "m21" size = "3" required/></td>
<td><input type = "number" name = "m22" size = "3" required/></td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td colspan = "3">Matrix 2</td>
</tr>
<tr>
<td><input type = "number" name = "n00" size = "3" required/></td>
<td><input type = "number" name = "n01" size = "3" required/></td>
<td><input type = "number" name = "n02" size = "3" required/></td>
</tr>
<tr>
<td><input type = "number" name = "n10" size = "3" required/></td>
<td><input type = "number" name = "n11" size = "3" required/></td>
<td><input type = "number" name = "n12" size = "3" required/></td>
</tr>
<tr>
<td><input type = "number" name = "n20" size = "3" required/></td>
<td><input type = "number" name = "n21" size = "3" required/></td>
<td><input type = "number" name = "n22" size = "3" required/></td>
</tr>
</table>
</td>
</tr>
</table>
<center><input type = "submit" value = "Add"/></center>
</form>
</body>
</html>
<?php
$m = array(array());
$n =array(array());
$sum= array(array());
for($i=0;$i<3;$i++)
{
for($j=0;$j<3;$j++)
{
$m[$i][$j]=$_POST['m'.$i.$j];
$n[$i][$j]=$_POST['n'.$i.$j];
$sum[$i][$j]=$m[$i][$j]+$n[$i][$j];
}
}
echo 'Addition is :';
echo '<table border=1 style = "border-collapse:collaspe">';
for($i=0;$i<3;$i++)
{
echo '<tr>';
for($j=0;$j<3;$j++)
{
echo '<td>'.$sum[$i][$j].'</td>';
}
echo '</tr>';
}
echo '</table>';
?>
Я получаю ошибку в этом вложенном цикле for, где я беру значения из метода post в многомерный массив.
Каков ожидаемый ввод и ожидаемый результат?
Вместо $m = array(array())
вам действительно нужно что-то вроде $m = array(array(), array(), array())
.
Хм ... я думаю, что <form>
должен быть как минимум <form method = "post">
@EugeneAnisiutkin Да, я забыл это написать, но ошибка все еще есть.
@ChrisLear В чем разница?
@PritamParab ваш код инициализирует массив только с одним индексом. Итак, если вы попытаетесь получить доступ к $m[0]
, это сработает, но если вы попытаетесь получить доступ к $m[1]
, вы обнаружите, что он не установлен, поэтому попытка сделать что-то вроде $m[1][2] = 'x'
потерпит неудачу. Мой код инициализирует $m
с тремя индексами, поэтому все $m[0]
, $m[1]
и $m[2]
установлены. Это означает, что если вы попытаетесь установить $m[1][2]
, он будет работать. Попробуйте оба варианта и используйте var_dump
, чтобы увидеть разницу самостоятельно.
просто попробуйте изменить следующее
1. смени свой <form>
с
<form action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?> method = "post">
2. добавить атрибут имени к вашей кнопке отправки
<input type = "submit" name = "submit" value = "Add"/>
3. поместите свой php-код внутрь
if (isset($_POST['submit'])){
$m = array(array());
$n =array(array());
//your code....
}
надеюсь, это решит вашу проблему
Просто поместите код в if (isset($_POST['submit'])) {//code here}
. Основная проблема там). Ну щас с измененным кодом пользователя он есть =)
вы добавили атрибут имени к вашей кнопке отправки?
когда вы нажимаете кнопку добавления, ваша матрица отправляется через сообщение. но когда вы запускаете его в первый раз, матрица сообщений не установлена, значит (пусто), почему в цикле возникает ошибка undefined.
Небольшое объяснение. Ваша исходная проблема была вызвана в основном $_POST['m'.$i.$j]
.
На момент первого выполнения php-скрипта они не были определены, потому что данные из формы еще не были отправлены, а именованные значения просто еще не были добавлены в переменную $POST
.
Проверка if (isset($_POST['submit'])) {
в основном проверяет, были ли отправлены какие-либо формы с данными, и выполняет код внутри {...}
, только если они были.
Итак, если вы сделаете свой код похожим на
if (isset($_POST['submit'])){
//Your original php code goes here
}
он будет работать, потому что ваш код будет выполняться только после отправки формы.
Это не очень хорошее объяснение, но это лучшее, что я могу сделать
Я получаю неопределенную ошибку индекса для многомерного массива в php описание: Ваш код правильный. Просто инициализируйте массив как дураки. Если снова произойдет ошибка, проверьте форму для информирования.
<?php
$m = array();
$n =array();
?>
Возможный дубликат «Примечание: неопределенная переменная», «Примечание: неопределенный индекс» и «Примечание: неопределенное смещение» с использованием PHP