Javascript 在PHP中从二维数组创建非二叉树

Javascript 在PHP中从二维数组创建非二叉树,javascript,php,recursion,multidimensional-array,datasource,Javascript,Php,Recursion,Multidimensional Array,Datasource,我正在尝试根据二维数组中存储的值设置一个由KendoUI提供的Treeview。不幸的是,我不能集中精力创建数据源,它应该是JavaScript中使用的多维数组 计划是递归地读取二维数组,并逐段在PHP中以字符串形式构造数据源,然后将其传递给JavaScript函数 二维数组的一个示例: (第1维中的键是父元素的“名称”; 子元素的键为整数,值为子元素的“名称”) 它应该是什么样子的示例如下(有两个值): 我知道我必须考虑算法中的无限循环。从树的“叶”到“根”AO的直接路径最多只能包含2个单个值

我正在尝试根据二维数组中存储的值设置一个由KendoUI提供的Treeview。不幸的是,我不能集中精力创建数据源,它应该是JavaScript中使用的多维数组

计划是递归地读取二维数组,并逐段在PHP中以字符串形式构造数据源,然后将其传递给JavaScript函数

二维数组的一个示例: (第1维中的键是父元素的“名称”; 子元素的键为整数,值为子元素的“名称”)

它应该是什么样子的示例如下(有两个值):

我知道我必须考虑算法中的无限循环。从树的“叶”到“根”AO的直接路径最多只能包含2个单个值的实例。 如果满足该条件,分支将被放弃,不应再填充

有谁能给我指点一下正确的方向吗?
有什么PHP类可以用来简化这个问题吗?

如果你想将你的PHP结构转换成一个简单的JS映射,那么你可以在JS中使用类似这样的东西来创建你的结构:

constmaketree=(数据,节点=[…data.keys()],路径=[])=>{
常数res=节点
.filter((id)=>path.filter(x=>x==id).length<2)
.map((id)=>{
const kids=makeTree(data,data.get(id),path.concat(id));
返回{
文本:id,
…(kids.length?{items:kids}:{})
}
})
返回res
}
常量数据=新地图([
['1', ['2', '3', '4']],
['2', ['3']],
['3', ['3', '1']],
['4', ['2']]
])
控制台日志(
makeTree(数据)

)
你能展示一下你到目前为止所做的工作的代码吗?你是想用PHP还是JS来做这个转换?
Array
(
    [1] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 4
        )

    [2] => Array
        (
            [0] => 3
        )

    [3] => Array
        (
            [0] => 3
            [1] => 1
        )
    [4] => Array
        (
            [0] => 2
        )
)
  dataSource: [
    { text: "1", items: [
      { text: "2", items: [
        { text: "3" }
        ]},
      { text: "3" , items: [
        { text: "3" },
        { text: "1" }
        ]},
      { text: "4", items: [
        { text: "2", items: [
          { text: "3", items: [
            { text: "3" },
              { text: "1" }
            ] }
          ] }
        ] }
     ] },
    { text: "2", items: [
      { text: "3", items: [
        { text: "3" },
        { text: "1" , items: [
          { text: "1" },
          { text: "3" },
            { text: "4", items: [
              { text: "2" }
        ] }
          ] }
        ] }
     ] }
  ]