Как легко конвертировать $ x [‘a’] [‘b’] [‘c’] = d в $ x [‘a.b.c’] = d

У меня есть многоуровневое поле массива необходимо отправить через форму. Не уверен, что будет самым простым решением:

Поскольку 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'];

Или есть лучший способ погулять?

очень близок к этому вопросу, но еще не
Синтаксис конвертировать точки как "this.that.other" в многомерный массив в 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

Решение

У меня была бы функция 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector