【问题标题】:Create input name using array (php)使用数组创建输入名称(php)
【发布时间】: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

标签: php arrays forms input


【解决方案1】:

在此处找到解决方案 (https://gist.github.com/anjan011/a9789eb7ecb59e1c0f02)。超级简单,第一次尝试它可以进行一些我需要的修改和安全问题(如果有的话),但可以为您节省大量时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2013-11-21
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多