【问题标题】:Array foreach to form display and get the same result数组foreach形成显示并得到相同的结果
【发布时间】:2019-12-10 16:26:23
【问题描述】:

我有一个这样的数组

Array
(
    [data1] => Array
        (
            [name] => jhon
            [status] => 1
            [address] => 1
        )

    [data2] => Array
        (
            [name] => mayer
            [status] => 1
            [date] => 0
            [height] => 180
        )

    [data3] => Array
        (
            [name] => kilo
            [status] => 0
            [weight] => 0
            [Age] => 18
        )

)

然后像这样在我的模板中显示数组

<form action="" method="post">
<input type="hidden" name="act" value="do_add">

    foreach ($datas as $data){
     echo $data['name'];
       foreach ($data as $key => $value): ?>
         echo $key.' <input name="$key[]" type="text" value="$value">';
       }
    }

</form>

然后我将所有这些代码放在我的 php 文件中。表单内的 foreach 提交。

代码完美地向我展示了所有内容,但我提交的数据有错误结果。

提交的数据给我一个这样的数组。

Array
(
    [name] => Array
        (
            [0] => jhon
            [1] => mayer
            [2] => kilo
        )

    [status] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 0
        )

    [address] => Array
        (
            [0] => street
        )

    [date] => Array
        (
            [0] => 2019
        )

    [height] => Array
        (
            [0] => 190
        )

    [weight] => Array
        (
            [0] => 80
        )

    [age] => Array
        (
            [0] => 20
        )

)

问题是,我怎样才能得到与我的数组相同的结果。单击提交表单时,我需要将旧数组更新为新值。就像提交数据之前的数组格式一样。

谁能帮帮我?

【问题讨论】:

    标签: php arrays forms foreach


    【解决方案1】:

    如果您想要索引值,您的 HTML 代码编写不正确:

    echo $key.' <input name="$key[]" type="text" value="$value">';
    

    此行正在解析为 name="status[]",这不是您想要的。

    改为将这些行修改为:

    <?php
        foreach ($datas as $k => $data) {
            echo $data['name'];
            foreach ($data as $key => $value) {
                echo $key.' <input name="$k[$key]" type="text" value="$value">';
            }
        }
    ?>
    

    现在解析为name="data1[status]"

    【讨论】:

    • 注意,您从 OP 中保留了一些语法错误。首先,内部foreach 应该用大括号打开,而不是替代语法。其次,由于单引号是内部循环中echo 的容器,因此PHP 变量不会被这样解释。交换单引号和双引号,或者对 PHP 变量使用串联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多