// 按照arrparentid和id号进行排序
$this->sort_arr();
foreach ($this->arr as $k => $v){
$this->arr[$k][''row''] = $this->get_row_location($v[''id'']); // X轴位置
$this->arr[$k][''rowspan''] = $v[''child_bottom_num'']; // 行合并数
$this->arr[$k][''colspan''] = $v[''child_bottom_num''] == 0 ? $this->columns - $v[''column''] + 1 : 0; //列合并数
}
return $this->get_tree_arr();
}
/**
* 获取数组
* */
public function get_tree_arr(){
return is_array($this->arr) ? $this->arr : false;
}
/**
* 按arrparentid/id号依次重新排序数组
* */
public function sort_arr(){
// 要进行排序的字段
foreach ($this->arr as $k => $v){
$order_pid_arr[$k] = $v[''arrparentid''];
$order_iscost[] = $v[''sort''];
$order_id_arr[$k] = $v[''id''];
}
// 先根据arrparentid排序,再根据排序,id号排序
array_multisort(
$order_pid_arr, SORT_ASC, SORT_STRING,
$order_iscost, SORT_DESC, SORT_NUMERIC,
$order_id_arr, SORT_ASC, SORT_NUMERIC,
$this->arr);
// 获取每一个节点层次
for ($column = 1; $column <= $this->columns; $column++) {
$row_level = 0;
foreach ($this->arr as $key => $node){
if ($node[''column''] == $column){
$row_level++;
$this->arr[$key][''column_level''] = $row_level;
}
}
}
// 重新计算以ID作为键名
foreach ($this->arr as $k=>$v) {
$arr[$v[''id'']] = $v;
}
$this->arr = $arr;
}
/**
* 得到父级数组
* @param int
* @return array
*/
public function get_parent($myid){
$newarr = array();
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid][''parentid''];
$pid = $this->arr[$pid][''parentid''];
if(is_array($this->arr)){
foreach($this->arr as $id => $a){
if($a[''parentid''] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}
/**
* 得到子级数组
* @param int
* @return array
*/
public function get_child($myid){
$a = $newarr = array();
if(is_array($this->arr)){
foreach($this->arr as $id => $a){
if($a[''parentid''] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}
/**
* 获取当前节点所在的层级
* @param $myid 当前节点ID号
* */
public function get_level($myid, $init = true){
static $level = 1;
if($init) $level = 1;
if ($this->arr[$myid][''parentid'']) {
$level++;
$this->get_level($this->arr[$myid][''parentid''], false);
}
return $level;
}
/**
* 获取当前节点所有底层节点(没有子节点的节点)的数量
* @param $myid 节点ID号
* @param $init 第一次加载将情况static变量
* */
public function get_child_count($myid, $init = true){
static $count = 0;
if($init) $count = 0;
if(!$this->get_child($myid) && $init) return 0;
if($childarr = $this->get_child($myid)){
foreach ($childarr as $v){
$this->get_child_count($v[''id''], false);
}
}else{
$count++;
}
return $count;
}
/**
* 获取节点所有子节点ID号
* @param $catid 节点ID号
* @param $init 第一次加载将情况static初始化
* */
public function get_arrchildid($myid, $init = true) {
static $childid;
if($init) $childid = '''';
if(!is_array($this->arr)) return false;
foreach($this->arr as $id => $a){
if($a[''parentid''] == $myid) {
$childi