【发布时间】:2021-10-15 14:43:53
【问题描述】:
我想根据给定的数组创建所有必需的输入字段,并从数组中获取字段的名称。我已经做了几年并一直在使用的是下面的代码,我想知道是否有一种“更容易”处理和扩展的方式..
foreach($value as $obj => $entry):
if (is_array($entry) ):
foreach($entry as $entKey => $ent):
if (is_array($ent) ):
foreach($ent as $enty => $subEnt):
if(is_array($subEnt)):
foreach($subEnt as $pg => $pgbldr):
if(is_array($pgbldr)):
foreach($pgbldr as $za => $zxc):
$block .= '<input type="hidden" name="pageBuilder['.$key.']['.$obj.']['.$entKey.']['.$enty.']['.$pg.']['.$za.']" value="'.htmlentities($zxc).'">';
endforeach;
else:
$block .= '<input type="hidden" name="pageBuilder['.$key.']['.$obj.']['.$entKey.']['.$enty.']['.$pg.']" value="'.htmlentities($pgbldr).'">';
endif;
endforeach;
else:
$block .= '<input type="hidden" name="pageBuilder['.$key.']['.$obj.']['.$entKey.']['.$enty.']" value="'.htmlentities($subEnt).'">';
endif;
endforeach;
else:
$block .= '<input type="hidden" name="pageBuilder['.$key.']['.$obj.']['.$entKey.']" value="'.htmlentities($ent).'">';
endif;
endforeach;
else:
$block .= '<input type="hidden" name="pageBuilder['.$key.']['.$obj.']" value="'.htmlentities($entry).'">';
endif;
endforeach;
数组示例:
Array
(
[MegaSlider_31922] => Array
(
[type] => MegaSlider
[randId] => MegaSlider_31922
[visible] => 1
[height] => 768
[speed] => 5000
[tabs] => Array
(
[0] => Array
(
[horizontal_alignment] => left
[vertical_alignment] => top
[text_1] =>
[text_1_color] => #000000
[text_1_size] =>
...
)
)
[Settings] => Array
(
[background_color] => #000000
...
)
)
[ServiceBox_42933] => Array
(
[type] => ServiceBox
[randId] => ServiceBox_42933
[visible] => 1
[text_color] => #2a53ea
[tab] => Array
(
[0] => Array
(
[title] => ΔΩΡΕΑΝ ΜΕΤΑΦΟΡΙΚΑ
[subtitle] => ΓΙΑ ΠΑΡΑΓΓΕΛΙΕΣ ΑΝΩ ΤΩΝ 40€
...
)
[1] => Array
(
[title] => 4 ΤΡΟΠΟΙ ΠΛΗΡΩΜΗΣ
...
)
)
[Settings] => Array
(
[layoutwidth] => fullwidth
[background_color] => #000000
...
)
)
[CallOutActionBannersv1_74441] => Array
(
[type] => CallOutActionBannersv1
[randId] => CallOutActionBannersv1_74441
[visible] => 1
[tab] => Array
(
[0] => Array
(
[title] =>
[title_color] => #000000
...
)
[1] => Array
(
[title] =>
[title_color] => #000000
...
)
)
[Settings] => Array
(
[background_color] => #000000
[Image] =>
...
)
)
【问题讨论】:
-
我认为您可以在每个数组中通过
type分隔函数。比如type=ServiceBox,你调用一个函数来创建ServiceBox。每个type使用不同的函数来创建不同的项目。维护起来会更容易。 -
我不希望每种类型都依赖于一个函数,因为开发人员可以创建自己的结构。当前数组以 JSON 格式存储,因此没有标准结构。我只想基于“每个”json 构建表单输入。唯一的检查是当前数组是否还有子节点和 os on