PHP再帰取得関連ノード

4511 ワード

		$temp = [
	        [
	            'id'=>12,
                'sid'=>1,
                'pid'=>999,
                'gid'=>999,
            ],
            [
                'id'=>13,
                'sid'=>2,
                'pid'=>999,
                'gid'=>999,
            ],
        ];
        $found_key = array_search(40489, array_column($userdb, 'uid'));
		
		
		$meng = new Changeofscene;
        $array = $meng->queryChange();
		echo "
";
		print_r($array);exit();
		
		
		, [
            'id' => 64,
            'se' => 5,
        ], [
            'id' => 68,
            'se' => 5,
        ]
		
		
		
		
		$data = [[
            'id' => 12,
            'pid'=> 9,
            'se' => 1,
        ], [
            'id' => 13,
            'pid'=> 9,
            'se' => 1,
        ]];

        $meng = new Changeofscene;
        $array = $meng->queryChange();
		
		public function findOne($data,$all){
        $newArr = [];
        foreach ($data as $k=>$v){
            $newArr[] = $v['id'];
            $newArr[] = $v['pid'];
            $found_keys = array_search($v['pid'], array_column($array, 'value'));
            if($found_keys){
                $newArr[] = $array[$v['pid']]['sequence'];
            }
        }
        echo "
";
        print_r($newArr);exit();
    }
	
	
	
	
	
	$data = [ [
            'id' => 167,//    ->  ->    ->    ->      ->  
            'pid'=> 153,
            'se' => 5,
        ], [
            'id' => 12,
            'pid'=> 9,
            'se' => 1,
        ], [
            'id' => 147,//  
            'pid'=> 96,
            'se' => 5,
        ]];
	//        
    private function parent_tree_data($list, $child, &$trees = [])
    {
        $tree = array();
        foreach ($list as $k => $row) {
            if($row['value'] == $child) {
                $trees[] = $row['sequence'];
                $this->parent_tree_data($list, $row['sequence'],$trees);
                //$row['parent'] = $this->parent_tree_data($list, $row['sequence'],$trees);
                //$tree[] = $row;
            }
        }
        return $trees;
    }
    //        
    private function children_tree_data($list, $child, &$trees = [])
    {
        $tree = array();
        foreach ($list as $k => $row) {
            if ($row['sequence'] == $child) {
                $trees[] = $row['value'];
                $this->children_tree_data($list, $row['value'], $trees);
                //$row['children'] = $this->children_tree_data($list, $row['value'], $trees);
                //$tree[] = $row;
            }
        }

        return $trees;
    }
    //        
    public function findOne($data, $array)
    {
        $newArr = [];
        foreach ($data as $k => $v) {
            $newArr[] = $v['id'];
            $newArr[] = $v['pid'];
            $newArr = array_merge($newArr,$this->parent_tree_data($array, $v['pid']),$this->children_tree_data($array, $v['id']));
            //$newArr[] = $this->parent_tree_data($array, $v['pid']);
            //$newArr[] = $this->children_tree_data($array, $v['id']);
        }
        $newArr = array_unique($newArr);
        sort($newArr);
        /*echo "
";
        print_r($newArr);exit();*/
        return $newArr;
    }