这是我的阵列:
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
错误。有什么方法可以解决这个问题吗?
答案 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" />