У меня есть многоуровневое поле массива необходимо отправить через форму. Не уверен, что будет самым простым решением:
Поскольку 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;
}
У меня была бы функция 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);
Других решений пока нет …