duanjiao2978 2017-01-14 17:55
浏览 47
已采纳

PHP:修改多维数组最简单,最干净的方法?

I have a dynamic multi-dimensional array that can be of any dimension here is a sample..


$array_serial = 'a:2:{i:0;a:2:{s:2:"id";a:4:{s:3:"url";s:27:"products.php?la=electronics";s:6:"otitle";s:11:"Electronics";s:6:"utitle";s:11:"Electronics";s:4:"ttip";s:11:"Electronics";}s:8:"children";a:2:{i:0;a:2:{s:2:"id";a:4:{s:3:"url";s:51:"products.php?la=electronics&lb=Computer-Peripherals";s:6:"otitle";s:20:"Computer Peripherals";s:6:"utitle";s:20:"Computer Peripherals";s:4:"ttip";s:34:"Electronics : Computer Peripherals";}s:8:"children";a:1:{i:0;a:2:{s:2:"id";a:4:{s:3:"url";s:63:"products.php?la=electronics&lb=Computer-Peripherals&lc=Printers";s:6:"otitle";s:8:"Printers";s:6:"utitle";s:8:"Printers";s:4:"ttip";s:45:"Electronics : Computer Peripherals : Printers";}s:8:"children";a:1:{i:0;a:1:{s:2:"id";a:4:{s:3:"url";s:90:"products.php?la=electronics&lb=Computer-Peripherals&lc=Printers&ld=Single-Function-Printer";s:6:"otitle";s:23:"Single Function Printer";s:6:"utitle";s:23:"Single Function Printer";s:4:"ttip";s:71:"Electronics : Computer Peripherals : Printers : Single Function Printer";}}}}}}i:1;a:1:{s:2:"id";a:4:{s:3:"url";s:38:"products.php?la=electronics&lb=Mobiles";s:6:"otitle";s:7:"Mobiles";s:6:"utitle";s:7:"Mobiles";s:4:"ttip";s:21:"Electronics : Mobiles";}}}}i:1;a:2:{s:2:"id";a:4:{s:3:"url";s:31:"products.php?la=homenfurnitures";s:6:"otitle";s:19:"Home And Furnitures";s:6:"utitle";s:19:"Home And Furnitures";s:4:"ttip";s:19:"Home And Furnitures";}s:8:"children";a:2:{i:0;a:1:{s:2:"id";a:4:{s:3:"url";s:9:"about.php";s:6:"otitle";s:8:"About Us";s:6:"utitle";s:8:"About Us";s:4:"ttip";s:8:"About US";}}i:1;a:2:{s:2:"id";a:4:{s:3:"url";s:40:"products.php?la=homenfurnitures&lb=Other";s:6:"otitle";s:5:"Other";s:6:"utitle";s:5:"Other";s:4:"ttip";s:27:"Home And Furnitures : Other";}s:8:"children";a:1:{i:0;a:2:{s:2:"id";a:4:{s:3:"url";s:51:"products.php?la=homenfurnitures&lb=Lights-AnD-Lamps";s:6:"otitle";s:14:"Lights & Lamps";s:6:"utitle";s:14:"Lights & Lamps";s:4:"ttip";s:36:"Home And Furnitures : Lights & Lamps";}s:8:"children";a:2:{i:0;a:1:{s:2:"id";a:4:{s:3:"url";s:12:"contacts.php";s:6:"otitle";s:10:"Contact Us";s:6:"utitle";s:10:"Contact Us";s:4:"ttip";s:10:"Contact US";}}i:1;a:2:{s:2:"id";a:4:{s:3:"url";s:58:"products.php?la=homenfurnitures&lb=Dinnerware-AnD-Crockery";s:6:"otitle";s:21:"Dinnerware & Crockery";s:6:"utitle";s:21:"Dinnerware & Crockery";s:4:"ttip";s:43:"Home And Furnitures : Dinnerware & Crockery";}s:8:"children";a:1:{i:0;a:1:{s:2:"id";a:4:{s:3:"url";s:78:"products.php?la=homenfurnitures&lb=Dinnerware-AnD-Crockery&lc=Cups-AnD-Saucers";s:6:"otitle";s:14:"Cups & Saucers";s:6:"utitle";s:14:"Cups & Saucers";s:4:"ttip";s:60:"Home And Furnitures : Dinnerware & Crockery : Cups & Saucers";}}}}}}}}}}}';

All index "otitle" of this array will be displayed in form in an input type text, and the user can modify this Title according to their desire. How can i acheive this in a clean way??

And this is just part of the array, the actual array can be much bigger.

Here is my code to view "otitle" in a input type

function get_menu_list($selected_menus)
{

    if($selected_menus != null){
    foreach($selected_menus as $menu_level_1)
    {

        $title = implode("///",$menu_level_1['id']);

        echo '
            <li class="dd-item">
                <div class="dd-handle">
                    <input type="text" name="otitle[]" value="'.$menu_level_1['id']['otitle'].'" />
                </div>
        ';

        if(isset($menu_level_1['children']))
        {
            echo '<ol class="dd-list">';

            foreach($menu_level_1['children'] as $menu_level_2)
            {

                $title_level_2 = implode("///",$menu_level_2['id']);

                echo '
                    <li class="dd-item">
                        <div class="dd-handle">
                            <input type="text" name="otitle[]" value="'.$menu_level_2['id']['otitle'].'" />
                    </div>
                    ';

                if(isset($menu_level_2['children']))
                {
                    echo '<ol class="dd-list">';

                    foreach($menu_level_2['children'] as $menu_level_3)
                    {

                        $title_level_3 = implode("///",$menu_level_3['id']);

                        echo '
                            <li class="dd-item">
                              <div class="dd-handle">
                                <input type="text" name="otitle[]" value="'.$menu_level_3['id']['otitle'].'" />
                              </div>
                          ';

                        if(isset($menu_level_3['children']))
                        {
                            echo '<ol class="dd-list">';

                            foreach($menu_level_3['children'] as $menu_level_4)
                            {
                                $title_level_4 = implode("///",$menu_level_4['id']);

                                    echo '
                                        <li class="dd-item">
                                          <div class="dd-handle">
                                            <input type="text" name="otitle[]" value="'.$menu_level_4['id']['otitle'].'" />
                                          </div>
                                      ';

                                if(isset($menu_level_4['children']))
                                {
                                    echo '<ol class="dd-list">';

                                    foreach($menu_level_4['children'] as $menu_level_5)
                                    {
                                        $title_level_5 = implode("///",$menu_level_5['id']);

                                        echo '
                                            <li class="dd-item">
                                              <div class="dd-handle">
                                                <input type="text" name="otitle[]" value="'.$menu_level_5['id']['otitle'].'" />
                                              </div>
                                            </li>
                                          ';
                                    }

                                    echo "</ol>";
                                }

                                echo '</li>';
                            }

                            echo "</ol>";

                        }

                        echo '</li>';

                    }

                    echo "</ol>";
                }

                echo '</li>';

            }

            echo '</ol>';
        }

        echo '</li>';

    }

    }//end if
    else
    return null;    
}

$array_unserial = unserialize($array_serial);
echo get_menu_list($array_unserial);
  • 写回答

2条回答 默认 最新

  • drt41563 2017-01-20 09:01
    关注

    I did not used the Recursion method but since I have already written the function with using foreach loop. And here is the code of how I accomplished this task using this same function.

    if (isset($_REQUEST['u_arr'])) {        
        $array_serial = serialize($_REQUEST['u_arr']);
    }
    else {
    
    //Here is my code to view "utitle" in a input type
    $array_serial = $array_serial; /*You can get $array_serial from the question of this post*/
    
    }
    
    
    function get_menu_list($selected_menus)
    {
        if($selected_menus != null){
            foreach($selected_menus as $id1=>$menu_level_1)
            {
                $title = implode("///",$menu_level_1['id']);
                echo '
    <li class="dd-item">
    <div class="dd-handle">
    <input type="hidden" name="u_arr['.$id1.'][id][url]" value="'.$menu_level_1['id']['url'].'" />
    <input type="hidden" name="u_arr['.$id1.'][id][otitle]" value="'.$menu_level_1['id']['otitle'].'" />
    <input type="text" name="u_arr['.$id1.'][id][utitle]" value="'.$menu_level_1['id']['utitle'].'" />
    <input type="hidden" name="u_arr['.$id1.'][id][ttip]" value="'.$menu_level_1['id']['ttip'].'" />
    </div>
    ';
                if(isset($menu_level_1['children']))
                {
                    echo '<ol class="dd-list">';
                    foreach($menu_level_1['children'] as $id2=>$menu_level_2)
                    {
                        $title_level_2 = implode("///",$menu_level_2['id']);
                        echo '
    <li class="dd-item">
    <div class="dd-handle">
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][id][url]" value="'.$menu_level_2['id']['url'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][id][otitle]" value="'.$menu_level_2['id']['otitle'].'" />
    <input type="text" name="u_arr['.$id1.'][children]['.$id2.'][id][utitle]" value="'.$menu_level_2['id']['utitle'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][id][ttip]" value="'.$menu_level_2['id']['ttip'].'" />
    </div>
    ';
                        if(isset($menu_level_2['children']))
                        {
                            echo '<ol class="dd-list">';
                            foreach($menu_level_2['children'] as $id3=>$menu_level_3)
                            {
                                $title_level_3 = implode("///",$menu_level_3['id']);
                                echo '
    <li class="dd-item">
    <div class="dd-handle">
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][id][url]" value="'.$menu_level_3['id']['url'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][id][otitle]" value="'.$menu_level_3['id']['otitle'].'" />
    <input type="text" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][id][utitle]" value="'.$menu_level_3['id']['utitle'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][id][ttip]" value="'.$menu_level_3['id']['ttip'].'" />
    </div>
    ';
                                if(isset($menu_level_3['children']))
                                {
                                    echo '<ol class="dd-list">';
                                    foreach($menu_level_3['children'] as $id4=>$menu_level_4)
                                    {
                                        $title_level_4 = implode("///",$menu_level_4['id']);
                                        echo '
    <li class="dd-item">
    <div class="dd-handle">
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][id][url]" value="'.$menu_level_4['id']['url'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][id][otitle]" value="'.$menu_level_4['id']['otitle'].'" />
    <input type="text" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][id][utitle]" value="'.$menu_level_4['id']['utitle'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][id][ttip]" value="'.$menu_level_4['id']['ttip'].'" />
    </div>
    ';
                                        if(isset($menu_level_4['children']))
                                        {
                                            echo '<ol class="dd-list">';
                                            foreach($menu_level_4['children'] as $id5=>$menu_level_5)
                                            {
                                                $title_level_5 = implode("///",$menu_level_5['id']);
                                                echo '
    <li class="dd-item">
    <div class="dd-handle">
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][children]['.$id5.'][id][url]" value="'.$menu_level_5['id']['url'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][children]['.$id5.'][id][otitle]" value="'.$menu_level_5['id']['otitle'].'" />
    <input type="text" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][children]['.$id5.'][id][utitle]" value="'.$menu_level_5['id']['utitle'].'" />
    <input type="hidden" name="u_arr['.$id1.'][children]['.$id2.'][children]['.$id3.'][children]['.$id4.'][children]['.$id5.'][id][ttip]" value="'.$menu_level_5['id']['ttip'].'" />
    </div>
    </li>
    ';
                                            }
                                            echo "</ol>";
                                        }
                                        echo '</li>';
                                    }
                                    echo "</ol>";
                                }
                                echo '</li>';
                            }
                            echo "</ol>";
                        }
                        echo '</li>';
                    }
                    echo '</ol>';
                }
                echo '</li>';
            }
        }//end if
        else
            return null;    
    }
    $array_unserial = unserialize($array_serial);
    ?>
    <form method="post" action="">
        <?php get_menu_list($array_unserial) ?>
        <button type="submit">Submit</button>
    </form>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么