将php代码转换为javascript代码

将php代码转换为javascript代码,php,javascript,Php,Javascript,我需要显示表中的数据,每个条目都有一个父项,我的php代码如下所示: function makeArbo($array, $currentParent = 0, $currLevel = 0, $prevLevel = -1, &$result = '') { if (is_array($array) && count($array) > 0) { foreach ($a

我需要显示表中的数据,每个条目都有一个父项,我的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);
        ?>
}
函数makeArbo($array,$currentParent=0,$currLevel=0,$prevLevel=-1,&$result='')
{
if(is_数组($array)&&count($array)>0)
{
foreach($数组作为$项)
{
如果($currentParent==$item['idParent'])
{                      
如果($currLevel>$prevLevel)
$result.='
    '; 如果($currLevel==$prevLevel) $result.=''; $result.='
  • 。$item['name'].
  • ; 如果($currLevel>$prevLevel) $prevLevel=$currLevel; $currLevel++; makeArbo($array,$item['id',$currLevel,$prevLevel,$result); $curr级别--; } } 如果($currLevel==$prevLevel) $result.='
'; 返回$result; } } echo makeArbo($阵列); ?> }
我的桌子是这样的:

<?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
            )
        );
         }
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 ;
        }

    }
}
我认为您在js中的代码不正确,因为$array。对于js,当一个数组被传输时,它只复制该数组的地址,而不复制整个状态。对于status,我指的是数组中的当前位置,这在代码中是必需的。因此,每次函数makeArbo在js的部分中运行时,数组总是以其位置的第一个元素开始,这不是您所期望的

解决方案是将数组移到函数之外,让它成为一个全局变量,一切都会好起来

---------------------------------从这里开始读吧-----------------------------------

1,您需要使用对象来代替。看

function myVar(id, name, idParent){
          this.id = id;
          this.name = name;
          this.idParent = idParent;
}
在Javascript中,在selt之前没有var的变量是全局变量。看

array = new Array(...
3相应地替换其他代码。下面的代码在我自己的服务器上作为html文件进行测试

4此外,还应注意返回值。使用一个对象来保存返回值,否则我们无法得到我们想要的。最后这次一切都好了,我可以上床睡觉了

干杯

我的html文件:

<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>

<p id="demo">My First Paragraph</p>

<script>

function myVar(id, name, idParent){
      this.id = id;
      this.name = name;
      this.idParent = idParent;
}

array = new Array(
    new myVar(1, "maths", 0),
    new myVar(2, "Topologie", 1),
    new myVar(3, "Algèbre", 1),
    new myVar(4, "Algèbre linéaire", 3),
    new myVar(5, "Arithmétique", 3),
    new myVar(6, "Thérorème de Bézout", 5),
    new myVar(7, "Informatique", 0),
    new myVar(8, "C-C++", 7),
    new myVar(9, "Les pointeurs", 8)
);

function run() {
    var result = {};//the object to hold the values' position
    result.value = "";//the real values;
    document.getElementById("demo").innerHTML = makeArbo(0, 0, -1, result).value;
}


function makeArbo(currentParent , currLevel, prevLevel, result)
{
    if (array.length >0)
    {
       for (var i = 0 ; i < array.length; i++)
       {
           if (currentParent == array[i].idParent)
           {        
               if (currLevel > prevLevel)
                   result.value += '<ul>';

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

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

               if (currLevel > prevLevel)
                   prevLevel = currLevel;

               currLevel++;

               makeArbo(array[i].id, currLevel, prevLevel, result);

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

     return result;
}

}

window.onload = run;
</script>

</body>
</html>

我的第一个网页

我的第一段

函数myVar(id、name、idParent){ this.id=id; this.name=名称; this.idParent=idParent; } 数组=新数组( 新的myVar(1,“数学”,0), 新的myVar(2,“拓扑学”,1), 新的myVar(3,“Algèbre”,1), 新的myVar(4,“Algèbre linéaire”,3), 新的myVar(5,“Arithmétique”,3), 新的myVar(6,“Bézout的时代”,5), 新的myVar(7,“信息”,0), 新的myVar(8,“C-C++”,7), 新的myVar(9,“Les pointeurs”,8) ); 函数运行(){ var result={};//保存值位置的对象 result.value=”“;//实际值; document.getElementById(“demo”).innerHTML=makeArbo(0,0,-1,result).value; } 函数makeArbo(currentParent、currLevel、prevLevel、result) { 如果(array.length>0) { 对于(var i=0;i当前级别) result.value+='
    '; 如果(currLevel==prevLevel) result.value+=''; result.value+='
  • '+数组[i].name+'
  • '; 如果(当前级别>当前级别) prevLevel=currenlevel; currenlevel++; makarbo(数组[i].id、currLevel、prevLevel、result); 货币水平--; } } 如果(currLevel==prevLevel) result.value+='
'; 返回结果; } } window.onload=运行;
您是否想过使用ajax,我的意思是从php发送生成的表?您是否考虑过在没有特定问题的情况下将大量代码转储到网站上,从而成为一名服务生?它是否更适合您?不过我不确定,这只是一个建议。可以使用在JavaScript和PhpYes中都能工作的模板(如Mustache)。我使用ajax请求数组,效果很好。我为返回Json设置了一个全局变量,但它显示了相同的结果,几乎占表的四分之一。为了让我的问题更加明确,我开始编写完整的代码,这并不是我想要填充屏幕代码的目的。我用slice方法复制了一个全局变量上的return Json表…我将这个全局变量用在我的js代码中,但有相同的返回。在将数组作为全局变量移动之后,您也应该从方法的参数中删除它,是这样做的吗?您的新函数应该类似于此函数makeArbo(currentParent、currLevel、prevLevel、result)
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>

<p id="demo">My First Paragraph</p>

<script>

function myVar(id, name, idParent){
      this.id = id;
      this.name = name;
      this.idParent = idParent;
}

array = new Array(
    new myVar(1, "maths", 0),
    new myVar(2, "Topologie", 1),
    new myVar(3, "Algèbre", 1),
    new myVar(4, "Algèbre linéaire", 3),
    new myVar(5, "Arithmétique", 3),
    new myVar(6, "Thérorème de Bézout", 5),
    new myVar(7, "Informatique", 0),
    new myVar(8, "C-C++", 7),
    new myVar(9, "Les pointeurs", 8)
);

function run() {
    var result = {};//the object to hold the values' position
    result.value = "";//the real values;
    document.getElementById("demo").innerHTML = makeArbo(0, 0, -1, result).value;
}


function makeArbo(currentParent , currLevel, prevLevel, result)
{
    if (array.length >0)
    {
       for (var i = 0 ; i < array.length; i++)
       {
           if (currentParent == array[i].idParent)
           {        
               if (currLevel > prevLevel)
                   result.value += '<ul>';

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

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

               if (currLevel > prevLevel)
                   prevLevel = currLevel;

               currLevel++;

               makeArbo(array[i].id, currLevel, prevLevel, result);

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

     return result;
}

}

window.onload = run;
</script>

</body>
</html>