数组索引自动从 1 开始
Posted
技术标签:
【中文标题】数组索引自动从 1 开始【英文标题】:Array index automatically starts at 1 【发布时间】:2015-05-02 14:11:15 【问题描述】:我有 2 种输入类型。我有 4 个选择框和 4 个带有隐藏字段的复选框。复选框具有相同的名称和选择框。提交后,我这样做:
var_dump(Input::get(checkboxname));
var_dump(Input::get(selectboxname));
哪些输出:
array(4)
[1]=> string(5) "value"
[2]=> string(5) "value"
[3]=> string(5) "value"
[4]=> string(5) "value"
array(4)
[0]=> string(5) "value"
[1]=> string(5) "value"
[2]=> string(5) "value"
[3]=> string(5) "value"
这是我的选择框:
<select name="selectboxname[]" >
//values in a complicated for loop that's not important but it works
</select>
这是我的复选框:
<input type='hidden' value='othervalue' name='checkboxname[]'>
<input type="checkbox" name="checkboxname[]" value="value">
在数组中,复选框的索引为:1,2,3,4,选择框的索引为 0,1,2,3。我必须让索引相互匹配。我知道通常索引从 0 开始,所以选择框做得对。这里出了什么问题?
【问题讨论】:
你的意思是var_dump($checkboxname);
- 否则你只输出单个字符串
@n-dru 是的,我编辑了它。
不是因为你有一个和checkbox同名的隐藏元素吗?
@AndreiNikolaenko 我已经尝试删除隐藏字段,但它并没有改变任何东西
您能否在脚本一开始使用var_dump($_POST)
(resp. $_GET) 检查“原始” POST/GET 数据,以排除 laravel 正在执行此操作的任何可能性?跨度>
【参考方案1】:
尝试array_values 重新索引您的数组
<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>
输出:
Array
(
[0] => XL
[1] => gold
)
【讨论】:
【参考方案2】:我的猜测是它与 laravel 如何处理输入($_POST 或 $_GET)有关
为您正在使用的那个(POST 或 GET)做一个 var_dump 并查看。直接从 $_ 数组中访问值可能会更好。
【讨论】:
【参考方案3】:如果您想从零开始重新索引您的数组,只需执行以下操作:
array_values(Input::get('checkboxname'));
【讨论】:
嗯,确实如此。当复选框未选中时,它使用隐藏字段的值。 当我使用var_dump(array_values(Input::get('checkboxname')));
它实际上会给我正确的索引。仍然不知道为什么会出错
我当时正在考虑使用array_values(Input::get('checkboxname'))
。因为没有人能真正弄清楚这种奇怪的行为。在您的答案中解释array_values();
,并删除有关复选框在我不检查时不发送任何数据的错误部分。编辑好后我会接受它
关于复选框的部分没有错,但是由于您使用了隐藏元素,因此无法回答问题
对于这个问题的未来访问者,这并不能解释奇怪的行为。这是使索引正确的解决方案。我仍在寻找行为的解释【参考方案4】:
如果您想要未经检查的值,也许您应该在名称中使用数字:
<input type='hidden' value='othervalue' name='checkboxname[0]'>
<input type="checkbox" name="checkboxname[0]" value="value">
<input type='hidden' value='othervalue' name='checkboxname[1]'>
<input type="checkbox" name="checkboxname[1]" value="value">
【讨论】:
也许值得一提的是,我在 for 循环中使用了它。我确实得到了未经检查的值。我在[]
之间有一个变量,所以情况并非如此。对不起,如果我不清楚。
所以你可以使用索引值并将其输出到括号中,这应该确保正确的索引,也许仔细检查这个变量值?【参考方案5】:
<input type='hidden' value='othervalue' name='checkboxname[]'>
<input type="checkbox" name="checkboxname[]" value="value">
好像 type='hidden' 变成了 checkboxname[0]。
【讨论】:
如果是这样的话,它应该仍然显示数组中隐藏字段的值吧? 嗯……你说得有道理。尝试给隐藏的唯一值,然后打印/回显/警报它的值来测试它。以上是关于数组索引自动从 1 开始的主要内容,如果未能解决你的问题,请参考以下文章