将数组转换为嵌套的json(无参考)

时间:2019-04-17 09:28:37

标签: javascript php arrays json

此JSON表示如下所示的Employee-> Supervisor关系:

{
    "Pete": "Nick",
    "Barbara": "Nick",
    "Nick": "Sophie",
    "Sophie": "Jonas"
}

在这种情况下,Nick是Pete和Barbara的主管,Sophie监督Nick。

我想以此为层次结构

{“Jonas" : [
   {“Sophie":  [
       {“Nick" : [
            {"Pete": []},
            {"Barbara": []}
       ]}
   ]}
]}

我试图为键和值创建一个数组(值的偶数索引,键的奇数)

$i =0;
$arr[] = array();
            foreach ($files as $key => $f)
            {

                    $arr[$i] = $f;
                    $i++;
                    $arr[$i] = $key;
                    $i++;
            }

反复查找具有偶数索引且不重复的根

$i++;
                    for($x=0;$x<=6;$x+2){
                        for($z=1;$z<7;$z+2){
                            if($arr[$x] != $arr[$z]){
                               #som code   
                            }
                        }
                    }

然后找到下一个子节点,但仅适用于根节点

能帮上忙吗

1 个答案:

答案 0 :(得分:0)

我假设输入数据有效(没有循环引用),并且只有一个人是负责人(在问题first version中,您没有提到PHP中的代码  (而且您也使用javascript标签),所以我在JS中提供了答案,但是您仍然可以在前端使用它)

let s={
    "Pete": "Nick",
    "Barbara": "Nick",
    "Nick": "Sophie",
    "Sophie": "Jonas"
}

let t={};                                        // t is temporary object
let head=Object.values(s).find(x=>!(x in s))     // find head
Object.entries(s).flat().map(x=>t[x]={[x]:[]})   // t contains name-objects
Object.keys(s).map(x=> t[s[x]][s[x]].push(t[x])) // object nesting in t

console.log(t[head]);