ホームページ  >  記事  >  バックエンド開発  >  PHP無制限分類の画像とテキストコードの紹介

PHP無制限分類の画像とテキストコードの紹介

黄舟
黄舟オリジナル
2017-08-10 11:18:501306ブラウズ

無限分類とは、最上位の分類から開始して、各サブカテゴリを独自の複数のサブカテゴリに分割できることを意味し、常に分割することができ、これを無限分類と呼びます。幹。複数の枝に分岐し、これらの枝は別の枝に分岐します。理論的には無限に分割できます。

別の例として、家族には複数の子供がいる可能性があり、これらの子供を第 1 レベルの分類と見なします。そして、これらの子供たちが独自の家族を形成することになります。各家族に複数の子供がいる場合、理論的には無限に分割できます。分類は次の図に示すとおりです

id と pid の 2 つのフィールドを使用して、親分類とサブセット分類を接続します。これにより、たとえば、特定のレベルの分類の祖先と子孫を見つけることができます。トップカテゴリ>中国の歌手>ポップ歌手>人気男性歌手>ジェイ・チョウ;

データを作成するだけでは十分ではなく、無限分類の再帰アルゴリズムを使用する必要があります。 PHP無制限分類の画像とテキストコードの紹介

ここで最初に再帰とは何かについて説明します。再帰とは、ループの目的を達成するために関数自体を呼び出すプログラミング手法です。そこで問題は、なぜループを使用しないのかということです。ループを直接使用すると、パラメーターの問題をうまく解決できなくなります。特に複雑な問題を扱う場合、パラメーターをいつ初期化するか、いつパラメーターを蓄積するかをさらに考える必要があります。再帰ほど明確ではありません。

簡単な再帰の例を見てください。

function test(&$b=0){
    $b++;    if($b<10){
        test($b);
    }    return $b;
}echo test();

再帰はループの変形であるため、ループから抜け出すための条件、またはループを継続するための条件も必要です。ここでの &$b はパラメータを渡す方法であり、参照パラメータ自体を参照します。

前の分類に戻ります:

$host=&#39;127.0.0.1&#39;;
$db_user=&#39;root&#39;;
$db_pass=&#39;root&#39;;
$db_name=&#39;chenbk&#39;;
$timezone="Asia/Shanghai";
$link=mysqli_connect($host,$db_user,$db_pass,$db_name);
mysqli_query($link,"SET names UTF8");
header("Content-Type: text/html; charset=utf-8");

function tree($link,&$treeList=array(),$pid = 1,$count = 0) {  //$link为数据库连接,&$treeList为输出数组,因为需要累积结果,所以加上引用
    $count+=2;    //count为识别分级深度的标识
    $result = mysqli_query($link,"SELECT * FROM chen_category WHERE parentId={$pid}");
    while ($row=mysqli_fetch_assoc($result)) {
            $row[&#39;count&#39;] = $count;
            $row[&#39;name&#39;] = str_repeat(&#39; &#39;, $count).&#39;|-&#39;.$row[&#39;name&#39;];  //通过分级深度的标识,来给分类缩进效果
            $treeList[] = $row;   //把查询到的结果存储起来                         
            tree($link,$treeList,$row[&#39;id&#39;],$count);  //再次调用自身,这时的pid为上一条数据的id从而找到上一条数据的子分类;
    }
    return $treeList;    //输出结果
}

$values=tree($link);
echo &#39;<select name="parentId" id="">&#39;;

foreach ($values as $key => $value) {
    echo &#39;<option value="&#39;.$value[&#39;id&#39;].&#39;">&#39;.$value[&#39;name&#39;].&#39;</option>&#39;;
}

echo &#39;</select>&#39;;

この関数の実行プロセスは次のとおりです。

1 .pid=0 で最上位のカテゴリを見つけます

2.それに階層の深さを追加し、階層の深さによるインデント効果を追加して、このデータを保存します。

3. 2. で見つかったデータと、次のレベルのカテゴリの pid として最初のレベルのカテゴリの ID を渡して、再度呼び出します。そのサブカテゴリが見つかるたびに、最終的に次のレベルのカテゴリが見つかります。最小の第 1 レベルの分類です。

最終的な効果は次のようになります。

ここで pid のデフォルト値を 1 に設定したため、最上位の分類は表示されません

このアルゴリズムの並べ替え効果については、 、それは wilhe ループ内にあり、関数自体を呼び出すときに、最初に見つかったデータは 2 つで、1 つは中国の歌手用、もう 1 つはヨーロッパとアメリカの歌手用です。ただし、操作中、関数はレイヤーで呼び出されます。多層の for ループのように、最も内側のループが終了すると、外側のループが順番に完了します。したがって、中国人歌手を見つけても、関数は終了しませんでした。再帰自体はポップ歌手を見つけました。ジェイ・チョウが見つかってから、上位層でポップ女性歌手を処理し始めました。この処理の結果に基づいてソートが完了する。

以上がPHP無制限分類の画像とテキストコードの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。