php - 如何将数据发布为数组的索引数组(不指定索引)

标签 php jquery html post

我在将数据作为数组数组发布时遇到了一些问题。这就是我希望我的数据被发布的方式:

array(
['someName'] =>
array([0] =>
      array(['description'] =>890
            ['valore'] =>444)
      [1] =>
      array(['description'] =>98090
            ['value'] =>77)
) 

我知道如果我的 html 是这样的话我可以实现这个:

<input type='text' name="someName[0][value]">
<input type='text' name="someName[0][description]">
<input type='text' name="someName[1][value]">
<input type='text' name="someName[1][description]">

我的问题是输入字段在表的行上,用户可以根据需要添加/删除任意多的行,所以我不能有固定的索引(或者我必须修改输入字段的名称每次添加一行,因为每次我添加一行,我都会克隆表中的上一行)

所以我要问的是这两件事之一:

1) 有没有办法在不指定索引的情况下按我想要的方式发布数据

2) 如果不是,我如何动态修改新的输入字段,以便它们具有具有新索引的更新名称?

编辑 - 我已经尝试过使用 name="someName[value][]"name="someName[description][]" 但输出不是想要的:

array(['terreniOneri'] =>
       array(['descrizione'] =>array([0] =>890
                                      [1] => 98090)
               ['valore'] =>array([0] =>444
                                  [1] =>677)
      ) 

我知道我可以在 php 中迭代这个数组,我只是想知道我是否可以避免它。

最佳答案

按照你提出的问题去做。如果用户删除某行,您的表单元素将是:

<form action="..." method="post" onsubmit="return reindexer(this);">
    <input type='text' name="someName[0][value]">
    <input type='text' name="someName[0][description]">
    <input type='text' name="someName[2][value]">
    <input type='text' name="someName[2][description]">
</form>

但是在php中遍历具有非连续数字索引的数组是没有问题的:使用foreach循环。

<?php
if (count($_POST['somename']) > 0)
{
    foreach ($_POST['somename'] as $row)
    {
        echo "Value: ".$row['value']."<br />\n";
        echo "Description: ".$row['description']."<br />\n";
    }
}

如果您需要知道每行的编号作为连续索引(在提供的示例中,第 0 行仍为 0,但第 2 行应为 1(因为用户删除了一行),您可以使用变量作为计数器:

<?php
if (count($_POST['somename']) > 0)
{
    $i = 0;
    foreach ($_POST['somename'] as $row)
    {
        echo "Index $i<br />\n";
        echo "Value: ".$row['value']."<br />\n";
        echo "Description: ".$row['description']."<br />\n";
        $i++;
    }
}

我认为这种方法比其他解决方案更有意义,因为这样你会有一个项目数组,每个项目都是一个值和一个描述,而不是有两个单独的值和描述数组并且必须得到来自这两个数组而不是一个数组的项目值。

编辑:我修改了第一段代码以包含 <form>元素。这将是附带的 js 函数:

<script type="text/javascript">
function reindexer(frm)
{
    var counter = 0;
    var inputsPerRow = 2;
    for (var idx = 0; idx < frm.elements.length; idx++)
    {
        elm.name = elm.name.replace('%%INDEX%%', counter);
        if (idx % inputsPerRow == 1)
        {
            // only increment the counter (or row number) after you've processed all the
            // inputs from each row
            counter++;
        }
    }
}
</script>

关于php - 如何将数据发布为数组的索引数组(不指定索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072383/

相关文章:

php - Laravel 数据库查询不返回数据

jquery - 表单输入焦点问题

javascript - 如何用一组数组制作文本轮播

javascript - 如何绑定(bind)按钮(默认、悬停、事件状态)以交换 div 内容

javascript - Dojo 捕获自动完成事件

php - 如何计算与给定序列 (A) 具有给定相关性的随机值序列 (B)

php - 保护 php api 以在 android 应用程序中使用

javascript - <canvas> 字母形状中的clearRect()

asp.net-mvc - 将鼠标悬停在标签上仅填充文本所在的背景

php - 引用 JOINed MySQL 数据,如 JSON 表