鍍金池/ 問(wèn)答/PHP  HTML/ 看看這段php代碼如何解析成這樣的json

看看這段php代碼如何解析成這樣的json

clipboard.png

function getUserInfo($user_id)
{
    global $ecs, $db;
   // $arr[] = [
   //             'name' => $user_id,
   //             'children' => 1,
   //         ];
    $sql = "select user_id, up_id,normal_level from " . $ecs->table("users") . " where up_id = $user_id";
    $res = $db->getAll($sql);

    foreach ($res as $row) {
        if ($row['up_id'] = $row['user_id']) {
      
           $arr[][] = getUserInfo($row['user_id']);
        }
         $arr = [
                'name' => $row['user_id'],
                'children' => $arr,
            ];
     
    }
    return $arr;
}
{
"name":"?|?????-|?1?D3",
"children":
    [
{ 
  "name":"é¢??¤???¥èˉ?" , 
    "children":
    [
            {"name":"HTML & CSS" },
            {"name":"JavaScript" },
            {"name":"DOM" },
            {"name":"SVG" }
    ] 
  },
  
{ 
    "name":"???�" , 
    "children":
    [
        {
            "name":"è?°?o????è?ˉ???",
            "children":
            [
                {"name":"Notepad++"},
                {"name":"EditPlus"},
                {"name":"Sublime Text"}
            ]
        },
        {
            "name":"????????¨è?ˉ???",
            "children":
            [
                {"name":"Apache Http Server"},
                {"name":"Tomcat"}
            ]
        },
        {"name":"???è??D3.js"}
    ] 
},

{ 
    "name":"??¥é?¨",
    "children":
    [
        {
            "name":"é?????é??",
            "children":
            [
                {"name":"select"},
                {"name":"selectAll"}
            ]
        },
        {
            "name":"????????°???",
            "children":
            [
                {"name":"datum"},
                {"name":"data"}
            ]
        },
        {"name":"?·???????é?¤????′?"},
        {
            "name":"???????????¢",
            "children":
            [
                {"name":"??±??¢???"},
                {"name":"????o????"},
                {"name":"??£??1???"}
            ]
        },
        {"name":"?ˉ?????°o"},
        {"name":"????????¨"},
        {"name":"è?????"}
    ] 
},

{ 
    "name":"è??é??" , 
    "children":
    [
        {
            "name":"????±?????o???¨",
            "children":
            [
                {"name":"�??????"},
                {"name":"?????????"},
                {"name":"???é?μ??????"}
            ]
        },
        {"name":"??°???"}
    ]
}
]
}
回答
編輯回答
不二心

有一種結(jié)構(gòu)叫做遞歸

2017年4月10日 02:06
編輯回答
尕筱澄
$data = [
    ['name'=>17,'up_id'=>0],
    ['name'=>18,'up_id'=>17],
    ['name'=>23,'up_id'=>18],
    ['name'=>22,'up_id'=>23],
    ['name'=>24,'up_id'=>22],
    ['name'=>102,'up_id'=>24],
];

krsort($data);    //按up_id倒敘,有user_id,肯定下面有up_id(建立在先有up_id再有user_id的基礎(chǔ)上)

while(count($data) > 1) {
    foreach($data as $k=>$v) {
        $flag = true;
        foreach($data as $up_k=>&$up_v) {
            if($v['up_id'] == $up_v['name']) {
                $line = ['name'=>$v['name']];
                if(isset($v['child'])) $line['child']=$v['child'];
                $data[$up_k]['child'][] = $line;
                unset($data[$k]);
                $flag = false;
                break;
            }
        }
        unset($up_v);
        if(!$flag) break;
    }
}
2018年8月13日 01:27