我怎样才能 return 一个 PHP $_POST 数组作为可用作名称属性的字符串?
How can I return a PHP $_POST array as string that is usable as a name attribute?
问题:
我有一个 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
我在我的视图函数中设置了一个脚本,用于检查旧输入,并在表单未验证的情况下重新填充值。我需要找到一种方法 return 上述数组作为一系列 key/value 对,即
'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;
}
这让我有点接近,但不太正确。它 return 当我向它提供我的 $_POST 数组
时如下所示
[children[1]fname] => test
[children[1]mname] => test
[children[1]lname] => test
[children[1]dob] =>
// Expecting: children[1][fname] => test
// ...
或者是否有更简单的方法来完成此操作?
最终对我有用的东西:
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;
}
它没有考虑作为标量值的递归函数的最后一次调用的 return 值。添加这些 if/else 语句似乎已经解决了它。
if( $prefix == ''){
$result[$prefix . $key.''] = $value;
}else{
$result[$prefix . '['.$key.']'.''] = $value;
}
问题:
我有一个 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
我在我的视图函数中设置了一个脚本,用于检查旧输入,并在表单未验证的情况下重新填充值。我需要找到一种方法 return 上述数组作为一系列 key/value 对,即
'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;
}
这让我有点接近,但不太正确。它 return 当我向它提供我的 $_POST 数组
时如下所示[children[1]fname] => test
[children[1]mname] => test
[children[1]lname] => test
[children[1]dob] =>
// Expecting: children[1][fname] => test
// ...
或者是否有更简单的方法来完成此操作?
最终对我有用的东西:
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;
}
它没有考虑作为标量值的递归函数的最后一次调用的 return 值。添加这些 if/else 语句似乎已经解决了它。
if( $prefix == ''){
$result[$prefix . $key.''] = $value;
}else{
$result[$prefix . '['.$key.']'.''] = $value;
}