Я получаю неопределенную ошибку индекса для многомерного массива в php

Я новичок в 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 в многомерный массив.

Каков ожидаемый ввод и ожидаемый результат?

Jaquarh 30.10.2018 11:20

Вместо $m = array(array()) вам действительно нужно что-то вроде $m = array(array(), array(), array()).

Chris Lear 30.10.2018 11:23

Хм ... я думаю, что <form> должен быть как минимум <form method = "post">

Eugene Anisiutkin 30.10.2018 11:26

@EugeneAnisiutkin Да, я забыл это написать, но ошибка все еще есть.

Pritam Parab 30.10.2018 11:29

@ChrisLear В чем разница?

Pritam Parab 30.10.2018 11:30

@PritamParab ваш код инициализирует массив только с одним индексом. Итак, если вы попытаетесь получить доступ к $m[0], это сработает, но если вы попытаетесь получить доступ к $m[1], вы обнаружите, что он не установлен, поэтому попытка сделать что-то вроде $m[1][2] = 'x' потерпит неудачу. Мой код инициализирует $m с тремя индексами, поэтому все $m[0], $m[1] и $m[2] установлены. Это означает, что если вы попытаетесь установить $m[1][2], он будет работать. Попробуйте оба варианта и используйте var_dump, чтобы увидеть разницу самостоятельно.

Chris Lear 30.10.2018 12:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
434
3

Ответы 3

просто попробуйте изменить следующее

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}. Основная проблема там). Ну щас с измененным кодом пользователя он есть =)

Eugene Anisiutkin 30.10.2018 11:40

вы добавили атрибут имени к вашей кнопке отправки?

Chirag 30.10.2018 11:45

когда вы нажимаете кнопку добавления, ваша матрица отправляется через сообщение. но когда вы запускаете его в первый раз, матрица сообщений не установлена, значит (пусто), почему в цикле возникает ошибка undefined.

Chirag 30.10.2018 11:49

Небольшое объяснение. Ваша исходная проблема была вызвана в основном $_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();

?>

Другие вопросы по теме