根據(jù)子節(jié)點獲取所有的父節(jié)點以及父節(jié)點的父節(jié)點..
<?php
/**
* 認真編碼 快樂生活
* User: helloJiu
* Date: 2018/9/12
* Time: 11:44
*/
$src = '[{"id":"1","name":"媒體(白名單)","pid":"0"},{"id":"2","name":"黨媒公共平臺","pid":"0"},{"id":"3","name":"政府機構(gòu)","pid":"0"},{"id":"4","name":"其他","pid":"0"},{"id":"5","name":"中央媒體","pid":"1"},{"id":"6","name":"地方媒體","pid":"1"},{"id":"7","name":"門戶媒體","pid":"4"},{"id":"8","name":"綜合媒體","pid":"4"},{"id":"9","name":"專業(yè)媒體","pid":"4"},{"id":"11","name":"河北省","pid":"6"},{"id":"12","name":"山東省","pid":"6"},{"id":"13","name":"遼寧省","pid":"6"},{"id":"34","name":"北京","pid":"6"},{"id":"45","name":"視頻","pid":"9"},{"id":"46","name":"教育","pid":"9"},{"id":"79","name":"法律","pid":"9"},{"id":"80","name":"其他","pid":"9"},{"id":"81","name":"文學","pid":"9"}]';
$result = json_decode($src, true);
$map = array_combine(array_column($result, 'id'), array_column($result, 'pid'));
print_r(getIdAndPid($map, [81]));
/**
* 查出ids中的id以及其父id以及其父id的父id......
* @param $map 以id為鍵, pid為值的 所有數(shù)據(jù) 的map
* @param $ids 要查找的ids
* @return array
*/
function getIdAndPid(&$map, $ids){
$res = [];
foreach($ids as $id){
joinPid($map, $id, $res);
}
return array_values(array_unique($res));
}
function joinPid(&$map, $id, &$res){
// 如果其pid不為0, 則繼續(xù)查找
if(isset($map[$id]) && $map[$id] != 0){
joinPid($map, $map[$id], $res);
}
$res[] = $id;
}
根據(jù)節(jié)點獲取所有子節(jié)點id
<?php
/**
* 認真編碼 快樂生活
* User: helloJiu
* Date: 2018/9/12
* Time: 11:44
*/
$src = '[{"id":"1","name":"媒體(白名單)","pid":"0"},{"id":"2","name":"黨媒公共平臺","pid":"0"},{"id":"3","name":"政府機構(gòu)","pid":"0"},{"id":"4","name":"其他","pid":"0"},{"id":"5","name":"中央媒體","pid":"1"},{"id":"6","name":"地方媒體","pid":"1"},{"id":"7","name":"門戶媒體","pid":"4"},{"id":"8","name":"綜合媒體","pid":"4"},{"id":"9","name":"專業(yè)媒體","pid":"4"},{"id":"11","name":"河北省","pid":"6"},{"id":"12","name":"山東省","pid":"6"},{"id":"13","name":"遼寧省","pid":"6"},{"id":"34","name":"北京","pid":"6"},{"id":"45","name":"視頻","pid":"9"},{"id":"46","name":"教育","pid":"9"},{"id":"79","name":"法律","pid":"9"},{"id":"80","name":"其他","pid":"9"},{"id":"81","name":"文學","pid":"9"}]';
$result = json_decode($src);
print_r(getAllChild([1,2], $result));
/**
* 查出ids所有子節(jié)點, 包含自己
* @param $pids 需要查找的ids
* @param $collects 所有id和父類id集合
* @return array
*/
function getAllChild($pids, &$collects){
$map = [];
foreach($collects as $collect){
$map[] = $collect->pid . '_' . $collect->id;
}
$data = $pids;
foreach($map as $mix_str){
$mix = explode('_', $mix_str);
if(in_array($mix[0], $data)){
$data[] = $mix[1];
}
}
return $data;
}