ホームページ > バックエンド開発 > PHPチュートリアル > 二次元配列からN層分類木を取得するPHP実装コード

二次元配列からN層分類木を取得するPHP実装コード

高洛峰
リリース: 2023-03-03 17:20:01
オリジナル
1336 人が閲覧しました

会社の製品カテゴリはテーブルに保存されており、後続の操作のために階層配列を取得する必要があります。

しばらく考えましたが、データベースの繰り返し読み取りを回避する方法や、再帰を必要としない操作が思いつきませんでした。

データソース: (データは、1次元のキーと、対応する値の2次元配列のIDが同じである必要があります)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

$items = array(

    1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),

    2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),

    3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),

    4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),

    5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),

    6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),

    7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),

    8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),

    9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),

    10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),

    11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),

    12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),

    13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),

    14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),

    15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),

    16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),

    17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),

    18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),

    19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),

);

ログイン後にコピー

スパニングツリーの機能:

1

2

3

4

5

6

7

8

9

function genTree9($items) {

    $tree = array();

    foreach ($items as $item)

        if (isset($items[$item['pid']]))

            $items[$item['pid']]['son'][] = &$items[$item['id']];

        else

            $tree[] = &$items[$item['id']];

    return $tree;

}

ログイン後にコピー

もちろんです。データが特定の条件を満たしている場合、関数はわずか 5 行に減らすことができます:

1

2

3

4

5

function genTree5($items) {

    foreach ($items as $item)

        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];

    return isset($items[0]['son']) ? $items[0]['son'] : array();

}

ログイン後にコピー

1 回ループ、メモリ参照。時間とスペースを節約します。

二次元配列から N 層分類木を取得する PHP の実装コードに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート