我需要通过表单提交多级数组字段。不确定什么是最简单的解决方案:
由于php会自动将点转换为下划线,因此我将其更改为数组:
$form['a.b_b.c'] ==> <input name="a[b_b][c]" value="$form[a.b_b.c]">
我正确地得到了$_POST[a][b_b][c]
。
但是,在没有太多循环的情况下,将此$_POST
值分配回原始$form['a.b_b.c']
的最简单方法是什么?例如
$form['a.b_b.c'] = $_POST['a']['b_b']['c'];
还是有更好的方式走动?
非常接近这个问题,但还没有: Convert dot syntax like "this.that.other" to multi-dimensional array in PHP
这是我目前的解决方案:
foreach ($form as $k) {
$form[$k] = assign_val($_POST, $k);
}
function assign_val($arr = [], $key = '') {
$keys = explode('.', $key);
$val = &$arr;
foreach ($keys as $k) {
$val = &$val[$k];
}
return $val;
}
答案 0 :(得分:1)
我会有一个函数flatten
并执行类似的操作:
function flatten($array, $prefix = '') {
$result = array();
foreach($array as $key=>$value) {
if(is_array($value)) {
$result = $result + flatten($value, $prefix . $key . '.');
}
else {
$result[$prefix . $key] = $value;
}
}
return $result;
}
然后你可以这样做:
$form = flatten($_POST);