如何将$ x [' a'] [' b'] [' c'] = d转换为$ x [' abc' ] =很容易

时间:2017-02-07 23:25:01

标签: php arrays assign

我需要通过表单提交多级数组字段。不确定什么是最简单的解决方案:

由于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;
}

1 个答案:

答案 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);