1. 程式人生 > >PHP遞迴獲取所有下級

PHP遞迴獲取所有下級

<?php

$data = [
	[
		'uid' => 1,
		'username' => '155',
		'parent_username' => '0'
	],
	[
		'uid' => 2,
		'username' => '186',
		'parent_username' => '155'
	],
	[
		'uid' => 3,
		'username' => '189',
		'parent_username' => '186'
	],
	[
		'uid' => 4,
		'username' => '188',
		'parent_username' => '155'
	],
	[
		'uid' => 5,
		'username' => '187',
		'parent_username' => '188'
	],
	[
		'uid' => 6,
		'username' => '1898',
		'parent_username' => '146'
	],
];

/**
 * 獲取所有下級
 * [getTree description]
 * @param  [type] $data            [description]
 * @param  string $parent_username [description]
 * @return [type]                  [description]
 */
//有層次,返回所有下級資料
function getTree($data, $parent_username = '0')
{
    $arr = [];
	foreach($data as $key => $val){
		if($val['parent_username'] == $parent_username){
			$val['children'] = getTree($data, $val['username']);
			$arr[] = $val;
		}
	}
	return $arr;
}

//無層次,僅返回id
function getTree($data, $parent_username = '0', $is_first_time = true)
{
    static $arr = [];
    if ($is_first_time) {
        $arr = [];
    }
    foreach ($data as $key => $val) {
        if ($val['parent_username'] == $parent_username) {
            $arr[]           = $val['uid'];
            getTree($data, $val['username'], false);
        }
    }
    return $arr;
}

echo '<pre>';
print_r(getTree($data));



?>


相關推薦

PHP獲取所有下級

<?php $data = [ [ 'uid' => 1, 'username' => '155', 'parent_username' => '0' ],

php 高效、非迴圈所有下級,並將結果存為一維陣列

1.取出所有資料 public function teammember($id){ $next = pdo_fetchall("select id,openid,agentid from ".tablename("ewei_shop_member")."

Think PHP獲取所有的子分類的ID (刪除當前及子分類)

cti eid 刪除 error return code where arr pre 遞歸獲取所有的子分類的ID: //遞歸獲取所有的子分類的ID function get_all_child($array,$id){ $arr = array(); fo

PHP獲取選單

//首先做一個類內的變數,儲存一下相關的陣列: public $tree = null; //然後做個測試方法,用於輸出結果 public function test() { $r

用shell指令碼從多個不相關的目錄中獲取所有影象的路徑

get_imagelist.sh原始碼: dir_list=( "/opt/win/tim.zhong/database/face_dataset/image

sqlserver通過查詢所有下級或上級部門和使用者

查詢當前使用者所在部門的所有下級包括當前部門with cte as ( select Id,Pid,DeptName, 0 as lvl from Department where Id = 2 union all select d.Id,d.

python編寫爬蟲獲取區域程式碼-獲取所有子頁面

上一篇文章用htmlparser寫了一個java的獲取區域的爬蟲,覺得太笨重。發現python也可以實現這個功能。 這裡就簡單寫一個用python3寫的小爬蟲例子 功能目標:對指定網站的所有區域資訊進行篩選,並儲存到文字中 思路:1、定義一個佇列,初始向佇列中put一個地址

T-SQL 語句——CTE 獲取當前使用者及其所有下級使用者

CREATE TABLE #t( Id INT NOT NULL PRIMARY KEY IDENTITY, Name NVARCHAR(20) NOT NULL, ParentId INT NU

js獲取某個父節點下面的所有子節點

本次的工作主要是計算節點橙色部分標記的子節點數量,沒有橙色部分的節點,只是隱藏了橙色部分 json資料格式類似這種: { "name": "aaa", "Children": [ { "name": "aaa",

js原生獲取一個節點的所有父級節點

<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head>

Mysql獲取某個父節點下面的所有子節點和子節點上的所有父節點

在MySQL中自定義函式來實現遞迴獲取所有子節點,該方式的優點是可以減少java程式碼量,缺點是:1.不好維護;2.拼接的欄位太長的時候,自定義函式的返回值可能容量不夠,此時可以定義為text等大容量型別;3:show variables like 'group_concat_max_len'&nb

java獲取某個父節點下面的所有子節點

一.舉個栗子 1.menu實體類 package com.dafy.insureagent.bean; public class Menu { private String id; private String name; private String pid; p

獲取下級目錄

public class ProductCategory { /// <summary> /// ID /// </summa

獲取指定目錄下所有的指定格式的檔案

遞迴獲取目錄下所有的txt結尾的檔案的絕對路徑 package com; import java.io.File; /* * 把g:\java\JavaSE目錄下所有的txt結尾的檔案的絕對

php歸刪除所有文件

log bsp class light dir func return 文件 readdir function del_file($dir) { if (@rmdir($dir)==false && is_dir($dir)) { if ($dp

(3).獲取所有頁碼

一個 name date ges 不想 則表達式 字符串 limit 我們 # -*- coding: utf-8 -*- import scrapy class GetChoutiSpider(scrapy.Spider): name = ‘get_chou

php 函式的三種實現方式 php利用函式實現無限級分類

遞迴函式是我們常用到的一類函式,最基本的特點是函式自身呼叫自身,但必須在呼叫自身前有條件判斷,否則無限無限呼叫下去。實現遞迴函式可以採取什麼方式呢?本文列出了三種基本方式。理解其原來需要一定的基礎知識水品,包括對全域性變數,引用,靜態變數的理解,也需對他們的作用範圍有所理解。遞迴函式也是解決無限級分類的一個很

php實現一維陣列轉為指定樹狀結構 --- 省市區處理

### 這兩天腦殼痛,一時短路,想不到準備利用遞迴實現這個需求,最後還是要請教同事,回來自己在實現了一遍,並記錄下來 ### 原資料: // { // 廣東省: { // 廣州市: [ // "天河區", // "從化區", // "增城區" // ], // 深

PHP ,回撥函式

遞迴: //回撥函式 把一個函式的名字以字串形式傳到另一個函式中,按變數函式的使用方法使用這個函式 function jia($num1,$num2){ return $num1 + $num2; } function ha($a){

SQL Server 利用WITH AS獲取層級關係資料

WITH AS短語,也叫做子查詢部分(subquery factoring),在SQL Server 2005中提供了一種解決方案,這就是公用表表達式(CTE),使用CTE,可以使SQL語句的可維護性,同時,CTE要比表變數的效率高得多。     下面是CTE的語法: