Как я могу вернуть массив PHP $ _POST в виде строки, которую можно использовать в качестве атрибута имени?

У меня есть массив значений записей, который выглядит следующим образом:

$_POST['children'] = array(
[0]=>array(
'fname' => 'name',
'mname' => 'mname',
'lname' => 'lname,
'dob' => '10/17/1992
),
[1]=>array(
'fname' => 'name',
'mname' => 'mname',
'lname' => 'lname,
'dob' => '10/17/1992
),
[2]=>array(
'fname' => 'name',
'mname' => 'mname',
'lname' => 'lname,
'dob' => '10/17/1992
)
);
// and so on

У меня есть скрипт, настроенный в моих функциях просмотра, который проверяет старый ввод и повторно заполняет значения в случае, если форма не проверяется. Мне нужно найти способ вернуть вышеуказанный массив в виде серии пар ключ / значение, т.е.

'children[0][fname]' = 'name'
'children[0][mname]' = 'mname'
'children[0][lname]' = 'lname'
// ... and so on for all fields

В идеале я хотел бы, чтобы это работало с массивом любой глубины, что заставляет меня думать, что мне нужна какая-то рекурсивная функция для форматирования клавиш. Я ужасно переживаю, как это сделать.

Я работал со следующей функцией:

function flatten($post_data, $prefix = '') {
$result = array();
foreach($post_data as $key => $value) {
if(is_array($value)) {
if($prefix == ''){
$result = $result + flatten($value, $prefix. $key );
}else{
$result = $result + flatten($value, $prefix. '[' . $key . ']');
}

}
else {
$result[$prefix . $key .''] = $value;
}

}
return $result;
}

Это сближает меня, но не совсем верно. Он возвращает следующее, когда я передаю ему свой массив $ _POST

[children[1]fname] => test
[children[1]mname] => test
[children[1]lname] => test
[children[1]dob] =>
// Expecting: children[1][fname] => test
// ...

Или есть потенциально более простой способ сделать это?

1

Решение

Что в итоге сработало для меня:

function flatten($post_data, $prefix = '') {
$result = array();
foreach($post_data as $key => $value) {
if(is_array($value)) {
if($prefix == ''){
$result = $result + flatten($value, $prefix. $key );
}else{
$result = $result + flatten($value, $prefix. '[' . $key . ']');
}

}
else {
if( $prefix == ''){
$result[$prefix . $key.''] = $value;
}else{
$result[$prefix . '['.$key.']'.''] = $value;
}

}

}
return $result;
}

это не учитывало возвращаемое значение последнего вызова рекурсивной функции, являющееся скалярным значением. Добавление этого оператора if / else, кажется, разрешило это.

if( $prefix == ''){
$result[$prefix . $key.''] = $value;
}else{
$result[$prefix . '['.$key.']'.''] = $value;
}
0

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

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

По вопросам рекламы [email protected]