在PHP中,对于数组输入,INPUTS的顺序是否有保证?

aw *_*rud 19 html php forms html-post

我有一个表单,用户输入无限数量的数据行.他们通过在屏幕上输入他们想要的任意数量的行来到达表单.

<?php
$numRows = $_GET['NUM_ROWS_REQUESTED'];

?>
<form method="post">
<?php
for($i = 0; $i < $numRows ;$i++) {
  $uuid = uniqid();
?>

  <input type="text" name="MYDATA[<?php print $uuid; ?>][FIRST_NAME]" />
  <input type="text" name="MYDATA[<?php print $uuid; ?>][LAST_NAME]" />
<?php
}
?>
</form>
Run Code Online (Sandbox Code Playgroud)

我想知道,当表格被张贴并且我在$_POST['MYDATA']阵列中收到这些记录时,如果可以保证它们将按照它们在屏幕上发布的顺序排序.或者它们会被uniqid()随机生成的那个订购?

我使用唯一ID而不仅仅是更容易排序的整数的原因是用户可以删除行并使用该页面上的javascript添加其他行.检查碰撞太难了.

Rud*_*udu 10

W3规范不包括什么样的顺序形式的价值观应该被组装成一个数据集的规则,所以在技术上你不能肯定.另一方面,我没有看到(多年来在众多操作系统上的众多浏览器中)没有以源列表顺序提供数据的情况.在更改默认(UI生成)tabindex值时,我没有真正测试过的情况.

您可以在收到数组(asort)之后对其进行排序,以确定您正在读取的值是什么顺序.


mar*_*rio 7

它受到HTML4.01的保证(对于-urlencoded,但假设它与/ form-data相同),并且所有当前浏览器按照它们在文档中列出的顺序提交表单字段.

所以是的,它们是按照它们的外观排序的,而不是随机的uuid.

  • 在HTML5中,它并不明确,但它们经常引用表单元素的"树顺序"(DOM结构):http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls -and-forms.html#多部分形式的数据 (3认同)