PHPで無限のカテゴリカルデータを配列形式に変換する方法

PHPz
リリース: 2023-04-18 15:48:24
オリジナル
503 人が閲覧しました

PHP を使用した開発プロセスでは、無制限の分類が一般的かつ重要な要件です。使用と操作の便宜のために、通常、無限のカテゴリを配列形式に変換します。ここでは、無限のカテゴリデータを配列形式に変換する方法を示します。

  1. 無限カテゴリ データ形式の定義

始める前に、無限カテゴリ データの形式を確立する必要があります。一般に、基本的な無限分類データ形式は次のフィールドで構成されます。

  • id: 一意の識別子、通常は自動インクリメント ID。
  • name: カテゴリ名。
  • pid: 上位レベルの分類 ID、第 1 レベルの分類の場合は 0。
  • level: 分類レベル。第 1 レベルの分類の場合は 1。

たとえば、単純な無限カテゴリ データは次のとおりです。

[
    ['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
    ['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
    ['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
    ['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
    ['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
]
ログイン後にコピー
  1. 変換関数を定義します

再帰関数を定義できます。カテゴリカル データを配列形式に変換します。この関数のコードは次のとおりです。

function categoryToTree($source, $parentId = 0) {   
    $result = [];
   
    foreach ($source as $key => $value) {
        if ($value['pid'] == $parentId) {       
            unset($source[$key]);          
            $children = categoryToTree($source, $value['id']);     
            if (!empty($children)) {
                $value['children'] = $children;
            }
            $result[] = $value;         
        }
    }
   
    return $result;
}
ログイン後にコピー

再帰を使用して、無限の分類変換を実現します。具体的には、各カテゴリ データについて、まずそれが現在のカテゴリのサブカテゴリであるかどうかを判断します。サブカテゴリである場合は、それを結果配列に追加し、そのサブカテゴリを再帰的に処理します。そうでない場合は、カテゴリをスキップして、次のカテゴリを直接処理します。分類されたデータ。

サブカテゴリを再帰的に処理する場合、$source 配列を渡すことに注意してください。各カテゴリが 1 回だけ処理されるようにするには、処理されたカテゴリ データを $source 配列から削除する必要があります。

  1. 変換の実行

上で定義した変換関数を使用すると、無限のカテゴリ データを配列形式に変換できます。たとえば、次のコードを実行します。

$data = [
    ['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
    ['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
    ['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
    ['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
    ['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
];

$result = categoryToTree($data);

print_r($result);
ログイン後にコピー

出力結果は次のとおりです。

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 电子产品
            [pid] => 0
            [level] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 手机
                            [pid] => 1
                            [level] => 2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [name] => 智能手机
                                            [pid] => 2
                                            [level] => 3
                                        )
   
                                )
   
                        )
   
                    [1] => Array
                        (
                            [id] => 3
                            [name] => 电脑
                            [pid] => 1
                            [level] => 2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 5
                                            [name] => 笔记本电脑
                                            [pid] => 3
                                            [level] => 3
                                        )
   
                                )
   
                        )
   
                )
   
        )
   
)
ログイン後にコピー

ご覧のとおり、無限のカテゴリ データが配列形式に変換され、各カテゴリにはそのカテゴリが含まれています。サブカテゴリ、分類。このようにして、配列関数を使用して無限のカテゴリ データを簡単に処理できます。

以上がPHPで無限のカテゴリカルデータを配列形式に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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