Не считывает двумерный масив с формы

166
26 февраля 2018, 02:30

Часть программы должна считывать двумерный массив и искать количество элементов равным 0. Но, как я понял, оно даже полностью не считывает массив из формы.

Файл Ir_4_3:

<html>
<head>
<meta charset="utf-8">
<title>Ir_4_3</title>
<style>
.center {
    text-align: center;
}
</style>
</head>
<body>
<form action=Ir_4_3_task.php>
<table border="1 px" align="center">
<tr>
<th colspan="4">Введіть масив</th>
</tr>
<?php
// create two dimensional array
for( $c = 0; $c < 9; $c++ )
{
    for( $r = 0; $r < 4; $r++)
    {
        $two_dimensional_array[$c][$r] = mt_rand(0, 100);
    }
}
// create table with 9 rows and 4 columns
foreach( $two_dimensional_array as $sub_array )
{
    echo "<tr>";
    foreach( $sub_array as $key => $value )
    {
        echo "<td><input type=\"text\" name=\"value_$key\" value=\"$value\"         size=\"5\"></td>";
    }
    echo "</tr><br>";
}
?>
</table>
<br>
<div class = "center"><input type=submit value="Надіслати"></div>
</form>
</body>
</html>

Файл Ir_4_3_task.php:

<?php
echo "<pre>";
print_r($_GET);
echo "</pre><br>";
$ordered_names = array_values($_GET);
$k = 0;
foreach( $ordered_names as $sub_array )
{
    foreach( $sub_array as $key )
    {
        if( $sub_array[$key] == 0 ) $k++;
    }
}
echo "<pre>";
print_r($ordered_names);
echo "</pre>";
echo "К-ть елементів = ".$k;
?>

Результат:

Answer 1

На скриншоте изображен HTML код таблицы, которую Вы выводите:

И еще одно, вот такой код:

 foreach( $two_dimensional_array as $sub_array )
 {
     echo "<tr>";
    foreach( $sub_array as $key => $value )
    {
        echo "<td><input type=\"text\" name=\"value_$key\" value=\"$value\"         size=\"5\"></td>";
    }
    echo "</tr><br>";
 }

Можно заменить на такой:

foreach ($two_dimensional_array as $sub_array): ?>
    <tr>
        <?php foreach ($sub_array as $key => $value): ?>
            <td>
                <input type="text" name="value_<?= $key ?>" value="<?= $value ?>" size="5">
            </td>
        <?php endforeach ?>
    </tr><br>
<?php endforeach ?>

Предлагаю написать вот так:

foreach ($two_dimensional_array as $i => $sub_array):

И при выводе инпута, в атрибуте name написать:

name="value_<?= $i . '_' . $key ?>"
READ ALSO
Реализация аутентификации через SMS (Laravel)

Реализация аутентификации через SMS (Laravel)

Всем приветДелаю систему аутентификации на Laravel через SMS

165
Как удалить конкретную версию php-fpm

Как удалить конкретную версию php-fpm

Обновился до PHP 72, а вместе с ним обновились и все модули, включая php-fpm

174
Не устанавливается плагин для Sublime Text 3

Не устанавливается плагин для Sublime Text 3

ПриветНе могу установить плагин Sync Settings через Package Control

350