自动增量父数组的 PHP 语法

PHP syntax for autoincrement parent array

提问人:Pacerier 提问时间:7/29/2020 最后编辑:Pacerier 更新时间:7/30/2020 访问量:74

问:

<input name=foo[]>
<input name=foo[]>
<input name=foo[][]><input name=foo[][]><input name=foo[][]>
<input name=foo[]>

$_POST['foo']不是作为 创建的。array('1st', '2nd', array('3rd', '4th', '5th'), '6th')

为了做到这一点,我必须输入子数组的索引:

<input name=foo[]>
<input name=foo[]>
<input name=foo[2][]><input name=foo[2][]><input name=foo[2][]>
<input name=foo[]>

然而,这不太整洁(特别是对于运行巨大索引的页面)。

有没有更简洁的语法来解决这个问题?

也许可以引用该数组级别的最新索引的语法?

例如,如果下划线字符会这样做,那么与其跟踪丑陋的$i变量,不如像这样简单:

<input lorem name=foo[]>   lo 
<input ipsum name=foo[][]> re <input jhuin name=foo[_][]><input velit name=foo[_][]>
<input neque name=foo[]>   mi
<input porro name=foo[]>   ps
<input situn name=foo[]>   um
<input quiar name=foo[]>   jh
<input dolor name=foo[][]> ui <input adipi name=foo[_][]>
<input conse name=foo[]>   nv

..甚至:

<input lorem name=foo[]> lo
<input ipsum name=foo[]> re
<input jhuin name=foo[][]><input velit name=foo[_][]><input neque name=foo[_][]>
                         mi                          <input porro name=foo[_][_][]>
                         ps                          <input situn name=foo[_][_][]>
                         um                          <input quiar name=foo[_][_][]>
                         jh                          <input dolor name=foo[_][_][]>
<input conse name=foo[]> ui
<input adipi name=foo[]> nv
<input yaruk name=foo[]> el
php html forms 服务器 端渲染

评论


答:

0赞 Raghav Bhardwaj 7/29/2020 #1

您必须为索引指定一个值才能创建类似 的数组。 array('first', array('second', 'third', 'fourth'), 'fifth')

没有办法。像 foo[] 一样执行操作会自动为数组提供索引。 这是array_push的快捷方式。 input 中的 foo[] 大致表示 push 变量名 foo 中输入的值,如您所知,push 总是会在末尾附加 value。

1赞 F.Igor 7/29/2020 #2

这是不可能的。一种选择是使用JSON序列化表单数据,然后您可以根据需要将JSON数据发送到服务器。一个示例实现是 Jquery 插件(无内置转换)serializeJSON

var data=$("form").serializeJSON();

甚至您可以转换回 POST 或 GET 的常规查询字符串(添加索引)

var queryString = $.param(data);

现在,queryString 已按预期方式编制索引。

$(function(){
  
  var data=$("form").serializeJSON();
  console.log(data);  
  var newQueryString = $.param(data);
  console.log(newQueryString);        
  $("body").append($("<pre></pre>").text(JSON.stringify(data,null,"  ")));
  
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.serializeJSON/2.9.0/jquery.serializejson.js"></script>
<form method="POST">
<input name=foo[] value=1>
<input name=foo[] value=2>
<input name=foo[][]  value=3><input name=foo[][]  value=4><input name=foo[][] value=5>
     <input name=foo[][][] value=6>
     <input name=foo[][][] value=7>
     <input name=foo[][][] value=8>
     <input name=foo[][][] value=9>
<input name=foo[] value=10>
<input name=foo[] value=11>
<input name=foo[] value=12>
  <input type="submit" value=Submit>
</form>