数组索引自动从 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 开始的主要内容,如果未能解决你的问题,请参考以下文章

PHP------定义数组,取值数组和遍历数组

在lua表中实现索引从0开始

PHP----数组

PHP 数组

PHP--02

PHP中的数组