0

私はこのような多次元配列を持っています

$role = array (
                  'Dashboard' => null,
                  'Students' => 
                    array (
                      'Admission' => array ( 0 =>  'Entry' ,1 =>  'Review' , 2 =>  'Approved/Reject'
                       ),
                     'Search' => null,
                     'AdvanceSearch' => null,
                     'Courses' => null
                    ),
                  'HR' => array ('Settings' => null),
                  'Employee Management' => array ( 0 =>  'Entry',1 =>  'Association',2 =>  'Search' ),
                  'Employee Attendance' => null,
                  'Payroll' => array (0 =>  'Generate Pay Slip',1 =>  'Payroll Run' , 2 =>  'Payroll Revert',3 =>  'View Pay Slips'),
                  'Finance' => null,
                  'More' => null);

この配列の結果をhtmlに出力したい

これが望んでいた解決策です

再帰を使用してこれを実行しようとしていますが、DIV が適切に閉じられていないため実行できません。

<?php 

                             $child = 0;
                            function RecursiveWrite($array, $child ) {
                                $parent_array_size =  count($array);
                                foreach ($array as $key => $vals) {
                                    if(is_array($vals)){
                                        $inner_array_size = count($vals);
                                        echo "<div class='main clear'><input type='checkbox'/> ".$key." &nbsp; &nbsp; ";
                                        RecursiveWrite($vals,$child);
                                    }else{
                                        $child = 0;
                                        if(is_numeric($key)){
                                            echo " &nbsp; <div class='left'> &nbsp; &nbsp; <input type='checkbox' class=''/> ".$vals." &nbsp; &nbsp; </div></div>";
                                        }else{
                                            echo "<div class='clear'><input type='checkbox'/> ".$key." </div></div>";
                                        }
                                    }
                                    //
                                }
                            }
                            RecursiveWrite($role, $child);
                        ?>

ここに作業コードがあります

どうすればこれを入手できますか?

4

2 に答える 2

3

あなたの問題は、再帰後にdivを閉じていません この関数を試してください

function RecursiveWrite($array, $child )
{
    $parent_array_size =  count($array);
    foreach ($array as $key => $vals)
     {
        if(is_array($vals))
        {
            $inner_array_size = count($vals);
            echo "<div class='deep'><div class='extra'><input type='checkbox'/> ".$key."</div>";
            RecursiveWrite($vals,$child);
            echo "</div>";
        }
        else
        {
            if(is_numeric($key)){
                echo "<span class='single'><input type='checkbox' class=''/> ".$vals."</span>";
            }else{
                echo "<div class='single'><input type='checkbox'/> ".$key." </div>";
            }

        }
    }
}

この CSS を使用

<style type="text/css">
    .parent {border: solid 1px #000;}
    .parent div {border: solid 1px #000; margin:5px;}
    .extra {border:0px !important;}
    .single {margin-left:10px !important; border:0px !important;}
    span.single {display:inline-block; margin-left:20px;}
</style>

これを使用して関数を呼び出します

<div class="parent"><? RecursiveWrite($role, $child);?></div>

提供されたすべてのコードを配列とともに 1 ページに配置します。

Codding の標準を向上させるには、スタイルの html と php を分離する必要があります。運を試してみてください ;)

于 2012-08-29T07:00:12.113 に答える
1

再帰を呼び出すときに、適切な場所で を閉じていません。div再帰を終了した直後に、末尾を記述する必要がありますdiv

  • divを開く
  • 再帰を実行する
  • divを閉じる

同様に、不要な div が 2 つ閉じています。閉じるときと同じ数の div を開くようにしてください。逆も同様です。コードで変更が必要な場所をマークしました。

コード:

<?php 
    $child = 0;
    function RecursiveWrite($array, $child ) {
        $parent_array_size =  count($array);
        foreach ($array as $key => $vals) {
            if(is_array($vals)){
                $inner_array_size = count($vals);
                echo "<div class='main clear'><input type='checkbox'/> ".$key." &nbsp; &nbsp; ";
                RecursiveWrite($vals,$child);
                echo "</div>"; /* <== ADD THIS */
            }else{
                $child = 0;
                if(is_numeric($key)){
                    echo " &nbsp; <div class='left'> &nbsp; &nbsp; <input type='checkbox' class=''/> ".$vals." &nbsp; &nbsp; </div>"; /* <== REMOVE EXTRA DIV */
                }else{
                    echo "<div class='clear'><input type='checkbox'/> ".$key." </div>";  /* <== REMOVE EXTRA DIV */
                }
            }
            //
        }
    }
    RecursiveWrite($role, $child);
?>

http://codepad.viper-7.com/507rLcで実際の例を見つけることができます

于 2012-08-29T06:53:07.310 に答える