如何在php中引用动态文本框的2d数组

时间:2016-12-09 03:07:06

标签: php arrays post multidimensional-array

我创建了一个像这样的二维文本框数组:

<form name="form1" Method="POST" ACTION="dynamic_process.php">

        <?php for( $i = 1; $i <= $userinput; $i++ ) 
        { 
            echo '(X'.$i.' '; ?>
            <input id="txtbox" name="txtbox[][x]"  type="text" />
            <?php echo ', Y'.$i.' '; ?>
            <input id="txtbox" name="txtbox[][y]"  type="text" />
            <?php echo ', Z'.$i.' '; ?>
            <input id="txtbox" name="txtbox[][z]"  type="text" />
        <?php echo ')<br>'; 
        } ?>    
        <br>
    <input type="hidden" name="MaxCoordinates" value="<?php echo $userinput?>">
    <input type="submit" name="submit_coordinates" value="submit" />
</form>

我想首先遍历xyz坐标,然后在dynamic_process.php页面上打印出来。我很难理解如何引用数组中的索引。

textbox []的第一个索引是由用户输入动态决定的,第二个索引(其中包含x,y或z的索引)不是由用户输入决定的。

我尝试从dynamic_process.php引用文本框的尝试之一就是这样。

<?php
foreach ( $_POST['txtbox[]'] as $txtbox )
{
    echo '<br>';
    foreach ( txtbox[][] as $point)

        echo '  '.$txtbox[]['X']. ', ';
        echo '  '.$txtbox[]['Y']. ', ';
        echo '  '.$txtbox[]['Z']. ', ';
    }
}?>

但是在加载时我在页面上出现此错误:

致命错误:无法在第21行的C:\ myfolder \ dynamic_process.php中使用[]进行阅读

第21行是这样的:

foreach ( txtbox[][] as $point)

2 个答案:

答案 0 :(得分:1)

这里有很多问题,要经过太多,所以以下只是“建议”尝试解决这个问题。在调试时,这已经过“测试”。

注意:为了便于阅读,我重命名了一些变量(例如),但每个人都有自己的偏好。

<form name="form1" method="POST" action="dynamic_processt.php">
    <?php
    // Added for testing as this is not specified in the supplied code
    $user_input = 2; 
    // If you are going to use ID's, each id has to be unique,
    //   so I have just come up with "something" to make them different.
    // Why do you even need id's?
    for ($i = 1; $i <= $user_input; $i ++) {
        // This can be refactored a lot as it is not beautiful.
        echo '(X' . $i . ' '; ?>
        <input id="text_box_1_<?= $i;?>" name="text_box[<?= $i;?>][x]" type="text"/>
        <?php echo ', Y' . $i . ' '; ?>
        <input id="text_box_2_<?= $i;?>" name="text_box[<?= $i;?>][y]" type="text"/>
        <?php echo ', Z' . $i . ' '; ?>
        <input id="text_box_3_<?= $i;?>" name="text_box[<?= $i;?>][z]" type="text"/>
        <?php echo ')<br>';
    } ?>
    <br>
    <input type="hidden" name="MaxCoordinates" value="<?php echo $user_input ?>">
    <input type="submit" name="submit_coordinates" value="submit"/>
</form>
<?php

显示结果: 你有一个2D数组,所以First foreach将允许你访问第一级元素。

然后直接使用命名的x,y,z索引引用数组元素。 当你使用var_dump($ _ POST)时,它会显示你的数组的实际结构。

请注意,在$ _POST实例中,您有一个数组,但您只需要通过变量名称来引用它。

// Debug
var_dump($_POST); // What does the structure of $_POST Look like?

foreach ($_POST['text_box'] as $text_box) {
    echo '<br>';
    echo '  ' . $text_box['x'] . ', ';
    echo '  ' . $text_box['y'] . ', ';
    echo '  ' . $text_box['z'] . ', ';

} ?>

你可以做很多事情来使这个更好,但我会把它留给你。

使用var_dump()可以非常方便地查看正在发生的事情,在这种情况下,它与您期望的非常不同。始终确保您知道变量正在做什么!

询问您是否有任何问题。

答案 1 :(得分:0)

当您收到提交数据后,我认为您应该通过

访问它
<?php
foreach ( $_POST['txtbox'] as $txtbox )
{

}?>

或者也许它可能会更好,如果在HTML中你没有使它成为txtbox [] [x]但成为txtbox [$ i] [x]它将变得更具可读性

祝你好运