ホームページ バックエンド開発 PHPチュートリアル PHP無制限分類サンプルプログラム_PHPチュートリアル

PHP無制限分類サンプルプログラム_PHPチュートリアル

Jul 20, 2016 am 11:11 AM
php windows 分類 原理 できる 存在する フォルダ 新しい 無制限 プログラム

無限分類の原理: Windows で新しいフォルダーを作成するのと同じように、新しく作成したフォルダーの下に新しいフォルダーを作成すると、無限ループが続きます。親クラスも分割できます。このようにサブクラスを分割して無限ループします

例1

コードは以下の通りです コードをコピー

$yArr = array(
1 = > array('id'=>1 ','parentid'=>0,'name'=>'第 1 レベルの列 1'),
2 => '2','parentid'=>0,' name'=>'第 1 レベルの列 2'),
3 => array('id'=>'3','parentid'=> 1,'name'=>'第 2 レベルの列 1' ),
4 => array('id'=>'4','parentid'=>1,'name'=>'Second -レベル列 2'),
5 => array('id '=>'5','parentid'=>2,'name'=>'第 2 レベル列 3'),
6 = > array('id'=>'6','parentid' =>3,'name'=>'第 3 レベルの列 1'),
7 => '7','parentid'=>3,'name'=> '第 3 レベルの列 2'),
8 => array('id'=>8','parentid'=> 2,'name'=>'第 2 レベルの列 3'),
);

/**
* 現在のIDのサブIDを取得します
* @param array $data 元の配列
* @param int $id current id
* @param int $layer current level
*/
function genCate($data, $pid = 0, $level = 0)
{
if($level == 10) Break;
$l = str_repeat("   ;  ", $level);
$l = $l.'└';
static $arrcat = array() ;
$arrcat = empty($level) ? array() : $arrcat;
foreach ;
echo "";



注:かけ放題なのでレベル$level=10の時に飛び出す判定を追加しました。通常の Web サイトには 10 レベルを超えるディレクトリ構造はありません。

静的変数を実行した後、現在のレベルを確認します。レベルが 0 の場合は、これが最上位のメニューであることを意味し、$arrcate データをクリアして再宣言する必要があります。


コードは次のとおりですコードをコピーします//テーブル "class" を作成しますCREATE TABLE `class` ( コード
`id` int(11) NOT NULL auto_increment COMMENT 'category id' ,

`f_id` int(11) NOT NULL COMMENT '親 ID',
`name` varchar(25) Collat​​e gbk_bin NOT NULL COMMENT 'カテゴリ名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET =gbk COLLATE=gbk_bin AUTO_INCREMENT=1 ;


コードは次のとおりですコードをコピー< ?php
header("Content-タイプ:テキスト/html; charset=utf-8");

$db=new mysqli(" localhost","root","","news_php100");

//データベース接続をインスタンス化します。これを使用する前に、mysqli クラス ライブラリがロードされていることを確認するか、mysql_connect を使用して接続してください。

if(mysqli_connect_errno()){

echo "リンクに失敗しました:".mysqli_connect_error();

exit(); }

$db->query("set names utf8");

$result= $db->query("select name from class where f_id=0");

//f_id=0 のカテゴリを検索、つまり大カテゴリごとに検索します。

while($row=$result->fetch_assoc()){


echo $row['name']."< br>"; //これは各主要カテゴリをループアウトします。

}

//同様に、ニュースのサブカテゴリをループアウトできます。

$result=$db->query("select * from class where f_id=1");

//f_id=1 のカテゴリを検索します。つまり、「ニュース」のサブカテゴリを検索します。

while($row=$result->fetch_assoc()){


echo $row['name']."

"; //これは 'news' のサブクラスをループアウトします。注: 孫カテゴリを除く、サブカテゴリのみ。

}

//ここに書くと、このカテゴリが 10 レベルのカテゴリである場合、各サブカテゴリを循環させるために
10 回のループを記述する必要がありますか?さらに多くのレベルの分類がある場合、このように記述するのは明らかに非現実的です。

//それでは、解決策は何でしょうか?再帰関数を作成し、パラメーターとして f_id を渡し、各 f_id の値を継続的にループします。これは、各 f_id 値のサブクラスをループアウトすることを意味します。

//まず、各カテゴリの値を 2 次元配列に保存します。これは、次の再帰関数で役立ちます。

コードは次のとおりです$result=$db->query("select * from class");技術記事
コードをコピー

while($row=$result->fetch_assoc( )){

$arr[]=array($row[id],$row[f_id],$row[name]); //各行には

分類のid、f_id、名前の情報が保存されます。


}

function fenlei($f_id=0){ //$f_id は 0 に初期化されます。つまり、サイクルは最大のカテゴリから始まります。

global $arr; // $arr をグローバル変数として宣言します。関数内で参照できます。

for($i=0;$i< count($arr);$i++){ //カテゴリごとにループします。

if($arr[$i][1]==$f_id){ //$arr[$i][1]は$i+1番目のカテゴリのf_idの値を表します。

$f_id=0 から開始、つまり f_id=0 の分類を出力します。


echo $arr[$i][2]."< br>"; //$arr[$i][1] は $i+1 番目のカテゴリの名前の値を表します。

fenlei($arr[$i][0]); //$arr[$i][1] は $i+1 番目のカテゴリの ID の値を表します。再帰を実行します。つまり、独自の ID を f_id パラメータとして使用して、独自のサブクラスをリサイクルします。

}

}

}

fenlei(); //この関数を使用します。

?>

例 3

php 無制限の分類、出力ツリー図をサポートします

http://www.bkjia.com/PHPjc/444632.html
コードは次のとおりです コードをコピーします
/**
* ユニバーサルツリークラス、任意のツリー構造を生成可能
*/
クラス ツリー
{
/**
* ツリー構造を生成するために必要な 2 次元配列
* @var array
*/
var $arr = array();

/**

* ツリー構造を生成するために必要な変更シンボル。画像に置き換えることができます
* @var array
*/
var $icon = array('│','§','└' );

/**

* @アクセス非公開
 */
var $ret = '';

/**

* コンストラクター、クラスを初期化します
* @param array 2 次元配列、例:
* array(
* 1 => array('id'=>'1','parentid'=>0,' name '=>'第 1 レベルの列 1'),
* 2 => array('id'=>'2','parentid'=>0,'name'=>'第 1 レベル列 2' ),
* 3 => array('id'=>'3','parentid'=>1,'name'=>'第 2 レベルの列 1'),
* 4 = > array( 'id'=>'4','parentid'=>1,'name'=>'第 2 レベルの列 2'),
* 5 => ;'5', 'parentid'=>2,'name'=>'第 2 レベルの列 3'),
* 6 => array('id'=>6','parentid'= >3,'name '=>'第 3 レベルの列 1'),
* 7 => array('id'=>'7','parentid'=>3,'name'=> ;'第 3 レベルの列 2' )
* )
*/
関数ツリー($arr=array())
{
$this->arr = $ arr;
$this->ret = '';
return is_array($arr);
}
/**

* 親配列を取得します
* @param int
* @return array
*/
function get_parent($myid)
{
$newarr = array( );
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid]['parentid'];
$pid = $this- > arr[$pid]['parentid'];
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if ($ a['parentid'] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}

/**

* 子配列を取得します
* @param int
* @return array
*/
function get_child($myid )
{
$a = $newarr = array();
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if( $a['parentid'] == $myid) $newarr[$id] = $a;
}
}
return $newarr : false;
}

/**

* 現在位置の配列を取得します
* @param int
* @return array
*/
function get_pos($myid,&$newarr)
{
$a = array();
if(!isset($this->arr[$myid])) return false;
$newarr[] = $this ->arr[$myid];
$pid = $this->arr[$myid]['parentid'];
if(isset($this->arr[$pid]))
{
$ this- >get_pos($pid,$newarr);
}
if(is_array($newarr))
{
krsort($newarr);
foreach($newarr as $v)
{
$a[$v [' id']] = $v;
}
}
return $a;
}

/**
* --------------------- -- ---------------
* ツリー構造を取得します
* ------------------------ -- ---------
* @author Midnight(Yang Yunzhou), yangyunzhou@foxmail.com
* @param $myid は、この ID の下にあるすべての子を取得することを意味します
* @param $str 基本的なものを生成しますツリー構造のコード。例: "

$select>$spacer$name"
* @param $sid ツリーのドロップダウン ボックスを作成するときに必要な、選択された ID です
* @param $adds
* @param $str_group
* @return不明なタイプ
*/
function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
{
$number=1;
$child = $this-> $myid);
if(is_array($child))
{
$total = count($child);
foreach($child as $id=>$a)
{
$j=$k= '' ;
if($number==$total)
{
$j .= $this->icon[2];
}
else
{
$j .= $this->icon[1] ;
$k = $adds ? $this->icon[0] : '';
}
$spacer = $adds ? $adds.$j : '';
$selected = $id==$sid ? ' : '';
@extract($a);
$parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval

("$nstr = "$str "; ");
$this->ret .= $nstr;
$this->get_tree($id, $str, $sid, $adds.$k.' ',$str_group);
$number++ ;
}
}
return $this->ret;
}
/**
*前の方法と似ていますが、複数選択が可能です
*/
function get_tree_multi($myid, $str, $sid = 0, $adds = '')
{
$ number=1;
$child = $this->get_child($myid);
if(is_array($child))
{
$total = count($child);
foreach($child as $id => ;$a)
{
$j=$k='';
if($number==$total)
{
$j .= $this->icon[2];
}
else
{. $ J. = $This->
$k = $this-> : '';

$selected = $this-> have($sid,$id) '選択済み' : $selected.';
@extract($a);

eval("$nstr = "$str";"); $ this-&gt; ret。= $ nstr; ($list,$item){

return(strpos(',,'.$list.',',','.$item.','));
}
}
?>




注: プラットフォームの制限はありません。指定する必要があるのは、ID、親 ID、名前だけです。
上記でまとめた 3 つの無制限の分類コードには、プラットフォームの制限はありませんが、php でのみ使用できます。 ID、親ID、名前だけです。





www.bkjia.com


本当

http://www.bkjia.com/PHPjc/444632.html

無限分類の原理: Windows で新しいフォルダーを作成するのと同じように、新しいフォルダーの下に新しいフォルダーを作成すると、無限ループが続きます。これは、親クラスでも同様です。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

マルチスレッドをC言語で実装する4つの方法 マルチスレッドをC言語で実装する4つの方法 Apr 03, 2025 pm 03:00 PM

言語のマルチスレッドは、プログラムの効率を大幅に改善できます。 C言語でマルチスレッドを実装する4つの主な方法があります。独立したプロセスを作成します。独立して実行される複数のプロセスを作成します。各プロセスには独自のメモリスペースがあります。擬似マルチスレッド:同じメモリ空間を共有して交互に実行するプロセスで複数の実行ストリームを作成します。マルチスレッドライブラリ:pthreadsなどのマルチスレッドライブラリを使用して、スレッドを作成および管理し、リッチスレッド操作機能を提供します。 Coroutine:タスクを小さなサブタスクに分割し、順番に実行する軽量のマルチスレッド実装。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

PSの負荷速度をスピードアップする方法は? PSの負荷速度をスピードアップする方法は? Apr 06, 2025 pm 06:27 PM

Slow Photoshopの起動の問題を解決するには、次のような多面的なアプローチが必要です。ハードウェアのアップグレード(メモリ、ソリッドステートドライブ、CPU)。時代遅れまたは互換性のないプラグインのアンインストール。システムのゴミと過剰な背景プログラムを定期的にクリーンアップします。無関係なプログラムを慎重に閉鎖する。起動中に多数のファイルを開くことを避けます。

cマルチスレッドの3つの実装方法の違いは何ですか cマルチスレッドの3つの実装方法の違いは何ですか Apr 03, 2025 pm 03:03 PM

マルチスレッドは、コンピュータープログラミングの重要なテクノロジーであり、プログラムの実行効率を改善するために使用されます。 C言語では、スレッドライブラリ、POSIXスレッド、Windows APIなど、マルチスレッドを実装する多くの方法があります。

See all articles