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

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

Dec 20, 2016 pm 03:30 PM
PHP配列

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

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

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

$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' => '上坝村'),
);
ログイン後にコピー

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

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 行に減らすことができます:

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 配列を使用してチャートや統計グラフを生成および表示する方法 PHP 配列を使用してチャートや統計グラフを生成および表示する方法 Jul 15, 2023 pm 12:24 PM

PHP 配列を使用してチャートや統計グラフを生成および表示する方法

PHP 配列を使用して動的なスライドショーと画像表示を生成する方法 PHP 配列を使用して動的なスライドショーと画像表示を生成する方法 Jul 15, 2023 pm 01:17 PM

PHP 配列を使用して動的なスライドショーと画像表示を生成する方法

PHP 配列を使用してユーザー ログインおよび権限管理機能を実装する方法 PHP 配列を使用してユーザー ログインおよび権限管理機能を実装する方法 Jul 15, 2023 pm 08:55 PM

PHP 配列を使用してユーザー ログインおよび権限管理機能を実装する方法

PHPに存在する配列の数を確認する方法 PHPに存在する配列の数を確認する方法 Aug 04, 2023 pm 05:40 PM

PHPに存在する配列の数を確認する方法

PHP配列のキーと値のペアとは何ですか? PHP配列のキーと値のペアとは何ですか? Aug 03, 2023 pm 02:20 PM

PHP配列のキーと値のペアとは何ですか?

PHP 配列のパフォーマンス最適化手法の探求 PHP 配列のパフォーマンス最適化手法の探求 Mar 13, 2024 pm 03:03 PM

PHP 配列のパフォーマンス最適化手法の探求

PHP での配列結合の効果的な実装 PHP での配列結合の効果的な実装 Apr 30, 2024 pm 01:03 PM

PHP での配列結合の効果的な実装

配列が空かどうかを判断するPHPの関数は何ですか? 配列が空かどうかを判断するPHPの関数は何ですか? Aug 03, 2023 pm 05:15 PM

配列が空かどうかを判断するPHPの関数は何ですか?

See all articles