【问题标题】:Array index automatically starts at 1数组索引自动从 1 开始
【发布时间】:2025-12-25 18:05:16
【问题描述】:

我有 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 正在执行此操作的任何可能性?跨度>

标签: php html arrays laravel checkbox


【解决方案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]。

      【讨论】:

      • 如果是这样的话,它应该仍然显示数组中隐藏字段的值吧?
      • 嗯……你说得有道理。尝试给隐藏的唯一值,然后打印/回显/警报它的值来测试它。