HTML输入数组名称以字符串形式出现

时间:2014-07-28 16:01:12

标签: php arrays multidimensional-array

我有一个输入复选框字段,如下所示:

<input type="checkbox" name="group_items[<?=$item_id?>][<?=$group_id?>]" value="1" />

矩阵网格中有几个。在提交时,它应该发布这样的内容:

(array) Array
(
    [1] => Array
        (
            [1] => 1
            [3] => 1
            [5] => 1
            [9] => 1
            [13] => 1
            [15] => 1
        )

    [2] => Array
        (
            [1] => 1
            [3] => 1
            [5] => 1
            [9] => 1
            [13] => 1
            [15] => 1
        )

    [3] => Array
        (
            [2] => 1
            [4] => 1
            [8] => 1
            [10] => 1
            [14] => 1
        )

    [4] => Array
        (
            [2] => 1
            [4] => 1
            [8] => 1
            [10] => 1
            [14] => 1
        )

)

大多数时候,这似乎没问题。

我然后运行:

if(!empty($_POST['group_items']))
{
    foreach($_POST['group_items'] as $item_id => $item_groups)
    {
        $group_ids = array_keys($item_groups);
        foreach($group_ids as $group_id)
        {
            // do something
        }
    }
}

但是,在偶然的情况下,我收到了这个错误:

Uncaught PHP Error: array_keys() expects parameter 1 to be array, string given

好像发布了这个:

(array) Array
(
    [1] => (string)

)

我很清楚我可以对is_array执行$item_groups检查,但我需要了解它如何甚至可以是字符串而不是数组。

我也知道我可以将值从1更改为当前设置的键,并且具有从零开始的索引,如下所示:

(array) Array
(
    [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 5
            [3] => 9
            [4] => 13
            [5] => 15
        )

)

但是,这不会解决[1]作为字符串而不是数组的值的问题。

我也无法注销帖子数据,因为客户端由于此错误而丢失了数据,并且记录帖子以查看其中包含的内容会使他们失去更多数据的风险。这也是is_array检查不是解决方案的原因,因为它意味着发布的数据仍然以某种方式丢失并且无法解决实际原因。

我已检查服务器限制,以查找可以发布的最大字段数,并且足够高;我可以提交数百个复选框,它们可以很好地完成。这似乎也是一个间歇性错误,并且可以按预期工作几次,然后导致错误。

有人对某个原因有任何建议吗?

编辑:现在有错误转储数据。

(array) Array
(
    [0] => 1

)

0 个答案:

没有答案