PHP数组到jsTree

PHP数组到jsTree,php,arrays,jstree,Php,Arrays,Jstree,我有一个$key=>$value成对的数据数组,我希望能很好地显示给用户。当我试图想办法做这件事时,我想到了: 如果我能将JSON传递到页面并创建一个javascript树就好了 然后我找到了一个似乎完全符合我要求的。阅读文档后,我找到了创建树需要传递的JSON格式——因此我创建了一个递归函数将其转换为正确的数组格式,然后JSON_encode”将其编码并传递给构造函数。问题是,json_encode没有正确地创建子节点,因此它完全不可用。我喜欢通用的解决方案,不必为一种特定的显示类型(在本例中

我有一个
$key=>$value
成对的数据数组,我希望能很好地显示给用户。当我试图想办法做这件事时,我想到了:

如果我能将JSON传递到页面并创建一个javascript树就好了

然后我找到了一个似乎完全符合我要求的。阅读文档后,我找到了创建树需要传递的JSON格式——因此我创建了一个递归函数将其转换为正确的数组格式,然后
JSON_encode
”将其编码并传递给构造函数。问题是,
json_encode
没有正确地创建
子节点,因此它完全不可用。我喜欢通用的解决方案,不必为一种特定的显示类型(在本例中为jsTree)格式化源数据,我决定能够使用jsTree高效地获取任何数组并显示它。经过几个小时的搜索,我找不到解决这个问题的捷径

所以,我的问题是,将PHP数组转换为jsTree可以很好地使用的东西的最佳方式是什么。如果子节点没有图标,也没有图标所在的空间,则会增加额外的好处,因为我个人不处理文件系统,也不需要没有子节点的图标。

从数组创建jsTree 首先,让我们解决如何将数组转换为jsTree可以很好地处理的内容,因为
json_encode
无法正常工作,我们将导致无序列表格式。由于输入数组可以包含标量数据或数组,因此需要递归

为此,我们将创建
array2jstree
函数,该函数本质上是将数组转换为一个无序列表,该列表不是特定于jsTree的,只有一个
class
异常

function array2jstree($ar){
    $out = '';
    foreach($ar as $k => $v){
        $out .= "<li>$k";
        if(is_array($v)){
            $out .= array2jstree($v);
        }else{
            $out .= "<ul><li class=\"jstree-nochildren\">$v</li></ul>";
        }
        $out .= '</li>';
    }
    return "<ul>$out</ul>";
}
将在
数据
显示
为其子项时展开

请注意非数组值的类,即
jstree nochildren
。此类不是jsTree的一部分,但用于没有子项的任何项目(因此可以成功删除图标)

现在,所需要的只是将函数放入,并向其传递一个数组,以获得一个工作良好的jsTree,并带有图标。把它放在一起展示如何使用它(例如使用
echo
,但可以很容易地作为变量传递给模板引擎,等等:

echo '<div id="cTree">'. array2jstree(array('name' => $myArray)) .'</div>';
现在你们都做完了

echo '<div id="cTree">'. array2jstree(array('name' => $myArray)) .'</div>';
    <script>
    $('#cTree').jstree();
    </script>
.jstree-nochildren > a > .jstree-icon { display:none !important; }