array_push()抛出错误

时间:2015-04-28 10:24:28

标签: php html arrays array-push

这是我的阵列:

Array (
[country_0] => E92000001
[country_1] => L93000001
[country_2] => M83000003
[county_0] => E10000002
[county_1] => E10000003
[county_2] => E10000006
[county_3] => E10000007
[gor_0] => A
[gor_1] => B
)

我想得到这样的东西:

Array
(
[country] => Array(
              [0] => L93000001
              [1] => M83000003
              [2] => M83000003
             )

[county] => Array(
              [0] => E10000002
              [1] => E10000003
              [2] => E10000006
              [3] => E10000007
             )
[gor] => Array(
              [0] => A
              [1] => B
             )
)

我这样做的代码目前是:

$converted_array = [];

    foreach ($input as $key => $value) {

        $underscore_position = strpos($key, "_"); //returns integer.

        $stripped_key = substr($key, 0, $underscore_position); //returns word eg "country"

        array_push($converted_array[$stripped_key], $value); //doesn't work
        array_push($converted_array, $stripped_key[$value]); //doesn't work
        array_push($converted_array, $stripped_key => $value); //doesn't work
    }

    print_r($converted_array);

我无法让任何array_push()工作。我一直收到语法错误或非法偏移错误。

也许这不是最好的方法。我基本上试图操纵隐藏的表单发布数据。每个隐藏字段看起来都像这样:

<input name="country_0" type="hidden" value="E92000001">

country_之后的数字只是为了保持每个输入的唯一性。所以也许最好有<input name="country_E92000001" type="hidden" value="E92000001">这样的东西并进行某种数组键拼接。

那么我怎样才能让我的代码工作或者有更好的方法呢?

修改

要生成隐藏的输入字段,我使用以下代码:

<input name="<?php echo $key; ?>" type="hidden" value="<?php echo $subvalue; ?>">

因此,添加[]会给我一个Cannot use [] for reading错误。有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

只需将输入字段的name属性更改为:

<input name="country[]" type="hidden" value="E92000001">
                  //^^

然后它将自动成为一个数组。

修改

从更新后的代码中,您可以使用以下代码将[]添加到名称中:

<input name="<?php echo strtok($key, "_") . "[]"; ?>" type="hidden" value="<?php echo $subvalue; ?>">

答案 1 :(得分:2)

你应该试试这个

<input name="country[]" type="hidden" value="E92000001">
<input name="country[]" type="hidden" value="L93000001">
<input name="country[]" type="hidden" value="M83000003">

它将生成如下数组:

Array
(
        [country] => Array(
              [0] => L93000001
              [1] => M83000003
              [2] => M83000003
        )
)

答案 2 :(得分:1)

最佳解决方案是在输入字段中使用数组:

<input name="country[]" type="hidden" value="E9200" />
<input name="country[]" type="hidden" value="E9201" />
<input name="country[]" type="hidden" value="E9202" />