ホームページ > バックエンド開発 > PHPチュートリアル > PHP は無限分類を再帰的に実装します

PHP は無限分類を再帰的に実装します

WBOY
リリース: 2016-06-13 12:37:46
オリジナル
831 人が閲覧しました

PHP は無限レベルの分類を再帰的に実装します

一部の複雑なシステムでは、システムの柔軟性を高めるために情報列の無限レベルの分類が必要です。では、PHP はどのようにして無限分類を実現するのでしょうか?この記事では、再帰的アルゴリズムと mysql データ テーブルを組み合わせて無限分類を実現します。

再帰とは、簡単に言うと、プログラム コードを繰り返し呼び出すことです。コードがカスタム関数に書き込まれると、パラメーターやその他の変数が保存され、特定の条件が満たされるまでその関数が関数内で繰り返し呼び出されます。飛び出して対応するデータを返す前に到達しました。

Mysql

まず、製品分類情報を記録するデータテーブルクラスを準備します。テーブルには 3 つのフィールドがあります。id: カテゴリ番号、主キーは自動的に増加します。title: カテゴリ名、pid: それが属する上位カテゴリの ID。

クラステーブル構造:

<code> 
CREATE TABLE IF NOT EXISTS `class` ( 
  `id` mediumint(6) NOT NULL AUTO_INCREMENT, 
  `title` varchar(30) NOT NULL, 
  `pid` mediumint(6) NOT NULL DEFAULT '0', 
  PRIMARY KEY (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 
</code>
ログイン後にコピー

データを挿入した後、図に示すように:

PHP は無限分類を再帰的に実装します

PHP

さまざまなニーズに応じて、2 つのカスタム関数を異なる形式で提供しています。1 つは文字列を返し、もう 1 つは配列を返します。どちらの関数も再帰メソッドを使用します。まず、文字列形式を返す関数を見てみましょう:

<code> 
function get_str($id = 0) { 
    global $str; 
    $sql = "select id,title from class where pid= $id";  
    $result = mysql_query($sql);//查询pid的子类的分类 
    if($result && mysql_affected_rows()){//如果有子类 
        $str .= '<ul>'; 
        while ($row = mysql_fetch_array($result)) { //循环记录集 
            $str .= "<li>" . $row['id'] . "--" . $row['title'] . "</li>"; //构建字符串 
            get_str($row['id']); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级 
        } 
        $str .= '</ul>'; 
    } 
    return $str; 
} 
</code>
ログイン後にコピー

上記の関数 get_str() は、再帰によって下位レベルのカテゴリを継続的にクエリし、最後に文字列を返します。プロジェクトのニーズに応じて str を変更し、最終的に無限の階層リストを生成します。

<code> 
include_once('connect.php'); //连接数据库,connect.php文件自己写一个啊 
echo get_str(0); //输出无限级分类 
</code>
ログイン後にコピー
効果は次のとおりです:

PHP は無限分類を再帰的に実装します

次に、配列形式を返す関数を見てみましょう。また、再帰を使用する必要があります。

<code> 
function get_array($id=0){ 
    $sql = "select id,title from class where pid= $id"; 
    $result = mysql_query($sql);//查询子类 
    $arr = array(); 
    if($result && mysql_affected_rows()){//如果有子类 
        while($rows=mysql_fetch_assoc($result)){ //循环记录集 
            $rows['list'] = get_array($rows['id']); //调用函数,传入参数,继续查询下级 
            $arr[] = $rows; //组合数组 
        } 
        return $arr; 
    } 
} 
</code>
ログイン後にコピー
関数 get_array() は期待どおりの配列を返します。そのため、この方法で配列に対して任意の操作を実行できるように、著者は get_array() を使用することを推奨しています。配列を json 形式のデータに変換し、フロントエンド ページに渡すと、フロントエンド ページは json データを解析することで柔軟に分類情報を表示できます。たとえば、ツリー構造のカテゴリ リスト、ドロップダウン カテゴリ リストなどです。

<code> 
include_once('connect.php'); //连接数据库 
$list = get_array(0); //调用函数 
print_r($list); //输出数组 
</code>
ログイン後にコピー
出力効果は次のとおりです:

PHP は無限分類を再帰的に実装します

json 形式でデータを出力したい場合は、次を使用できます:

<code> 
echo json_encode($list); 
</code>
ログイン後にコピー

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