我有这个数组(见下文),我想重复每个具有键“重复”的数组,其值表示重复的次数。
$fields = array(
array(
'type' => 'title-wrap',
'holder' => 'h4',
'heading' => 'Test heading',
),
array(
'repeat' => 3,
'type' => 'radio',
'name' => 'specific_name',
'value' => array(
0 => 'First', // value for first repeat
1 => 'Second', // value for second repeat
2 => 'Third' // value for third repeat
),
)
);
为此,我创建了一个名为generateForm
的递归函数:
function generateForm($fields, $index = 0) {
if ( $fields == '' ) { return false; }
foreach ($fields as $field) {
if ( isset($field['type']) ) {
switch ( $field['type'] ) {
case 'title-wrap':
echo $field['heading'];
break;
case 'radio':
echo $field['value'][$index];
break;
}
}
if ( isset($field['repeat']) ) {
for ($i=0; $i < $field['repeat']-1; $i++) {
generateForm($field, $i);
}
}
}
}
我想要的输出:
测试标题
首先
第二
第三
但是我没有在输出中得到最后两个单词。我做错了什么?
答案 0 :(得分:1)
如果你想坚持使用递归方法,那么你需要纠正一些问题:
[$field]
。以下是更正后的代码:
function generateForm($fields, $index = 0) {
if ( $fields == '' ) { return false; }
foreach ($fields as $field) {
if ( isset($field['type']) ) {
switch ( $field['type'] ) {
case 'title-wrap':
echo $field['heading'] . "\n";
break;
case 'radio':
echo $field['value'][$index] . "\n";
break;
}
}
if ( isset($field['repeat']) && $index < $field['repeat'] - 1) {
generateForm([$field], $index + 1);
}
}
}