-1

テーブルからデータを表示する必要があり、各エントリには親があります。私のphpコードは次のようになります:

function makeArbo($array, $currentParent = 0, $currLevel = 0, $prevLevel = -1, &$result = '')
        {
            if (is_array($array) && count($array) > 0)
            {
                foreach ($array as $item)
                {
                    if ($currentParent == $item['idParent'])
                    {                      
                        if ($currLevel > $prevLevel)
                            $result .= '<ul>';

                        if ($currLevel == $prevLevel)
                            $result .= '</li>';

                        $result .= '<li>'.$item['name'].'</li>';

                        if ($currLevel > $prevLevel)
                            $prevLevel = $currLevel;

                        $currLevel++;

                        makeArbo($array, $item['id'], $currLevel, $prevLevel, $result);

                        $currLevel--;
                    }  
                }

                if ($currLevel == $prevLevel)
                    $result .=  '</li></ul>';

                return $result;
            }
        }

        echo makeArbo($array);
        ?>
}

私のテーブルは次のようになります:

<?php
        $array = array(
            array(
                'id'       => 1,
                'name'      => 'Maths',
                'idParent' => 0
            ),
            array(
                'id'       => 2,
                'name'      => 'Topologie',
                'idParent' => 1
            ),
            array(
                'id'       => 3,
                'name'      => 'Algèbre',
                'idParent' => 1
            ),
            array(
                'id'       => 4,
                'name'      => 'Algèbre linéaire',
                'idParent' => 3
            ),
            array(
                'id'       => 5,
                'name'      => 'Arithmétique',
                'idParent' => 3
            ),
            array(
                'id'       => 6,
                'name'      => 'Thérorème de Bézout',
                'idParent' => 5
            ),
            array(
                'id'       => 7,
                'name'      => 'Informatique',
                'idParent' => 0
            ),
            array(
                'id'       => 8,
                'name'      => 'C-C++',
                'idParent' => 7
            ),
            array(
                'id'       => 9,
                'name'      => 'Les pointeurs',
                'idParent' => 8
            )
        );
         }

結果は完璧です:

 <ul>
        <li>Maths</li>
        <ul>
            <li>Topologie</li>
            <li>Algèbre</li>
            <ul>
                <li>Algèbre linéaire</li>
                <li>Arithmétique</li>
                <ul>
                    <li>Thérorème de Bézout</li>
                </ul>
            </ul>
        </ul>
        <li>Informatique</li>
        <ul>
            <li>C-C++</li>
            <ul>
                <li>Les pointeurs</li>
            </ul>
        </ul>
    </ul>

しかし、このコードを php から javascript に変換する必要があります。

次のようなJavaScriptコードを試しました:

function makeArbo(array,currentParent,currLevel, prevLevel, result)
    {   
        if (typeof(currentParent)=='undefined'){

            currentParent=0 ;
            currLevel= 0 ;
            prevLevel=-1 ;
            result='';

    }
        if (array.length >0)
        {
          for (i=0;i< array.length;i++)
            {
                if (currentParent == array[i]['parentid'])
                {        
                   if (currLevel > prevLevel)
                        result += '<ul>';

                    if (currLevel == prevLevel)   
                        result += '</li>';

                    result += '<li>'+ array[i]['name']+'</li>';

                    if (currLevel > prevLevel)
                        prevLevel = currLevel;

                    currLevel++;
                    result+=makeArbo (array,array[i]['id'], currLevel, prevLevel, result.valueOf());

                    currLevel--;
                }  
           }
                  if  (currLevel == prevLevel) 
                  result += '</li></ul>';



         return result ;
        }

    }
}

戻り値が良くありません。最初の php コードと同じ戻り値がありません。私のphpコードでは結果が参照によって渡されるため、参照を(参照によって)交差するのは問題だと思います "&$result = ''" 。

助言がありますか?

4

1 に答える 1