数日前に書いた無限分類クラス
これは 1 週間前に書きましたが、実際に使ってみると非常にうまく機能しています。
主なアイデアの出典: http://www.phpobject.net/b...[url=http://www.phpobject.net/blog/read.php?49][/url ]
ここでは原理は説明しません。コードを直接送信してください。
PS: このコードは直接使用できないため、他のライブラリ クラスと組み合わせる必要があります。ここでは主に分類の考え方を紹介します。
コードをコピー コードは次のとおりです:
<
/**
--
-- 表の構造 `daxue8_category`
--
CREATE TABLE `daxue8_category` (
`cid` smallint(6) NOT NULL auto_increment,
`pid` smallint(6) NOT NULL default '0',
`level` smallint(6) NOT NULL default '0',
`cname` char(64) NOT NULL default '',
`lft` smallint(6) NOT NULL デフォルト '0',
`rgt` smallint(6) NOT NULL デフォルト '0',
`uid` mediumint(8) NOT NULL デフォルト '0',
`username` char(32) NOT NULL default '',
`ctime` int(10) NOT NULL default '0',
`cstate` tinyint(1) NOT NULL default '0',
`gnum` mediumint(8) NOT NULL default '0',
`orderstyle` smallint(3) NOT NULL default '0',
PRIMARY KEY (`cid`)
) TYPE=MyISAM AUTO_INCREMENT =2;
--
-- 表中のデータ `daxue8_category`
--
INSERT INTO `daxue8_category` VALUES (1, 0, 1, 'root', 1 , 2, 0, '管理员', 1163608814, 1, 0, 0);
*/
クラスカテゴリ
{
var $module;
var $tbname; 🎜> 関数 category()
{
$this->tbname=TB_PREX.'_category'
$this->module=new module($this->tbname); }
/**
* 子ノードの追加
* @param array $node 追加する子ノードの属性
* @param int $pid 親ノードの ID
*/
function add($node,$pid){
//ノードが既に存在するかどうかを確認します
if($node_exist=$this- >module->detail('where pid='.$pid.' and cname=''.$node['cname'].''')){ __FUNCTION__.'(): ノード ' 。$ node [cname ']。 '.$pnode['rgt']);
$this->module->query('update ` '.$this->tbname.'` set rgt=rgt 2 where rgt>='. $pnode['rgt']);
//新しいノードを挿入
$node['pid']= $pid; $node['lft']=$pnode['rgt'];
$node['rgt']=$pnode['rgt'] 1;
$node['level ']=$pnode['level'] 1; // レベルを 1 つ追加します
return $ this->module->add($node);
}
/**
* ノードの削除
* @param $cid 削除するノードの ID
* @param $delete_childern ノードに子ノードがある場合、強制的に削除するかどうか。設定が true でない場合、子ノードが存在する場合、削除は失敗し false を返します
* *
*/
function delete($cid,$delete_childern=false)
{
//ノード情報を取得
$node=$this->get_by_cid($cid);
if(($this->child_num($node)>0)&&(!$delete_childern)) $this-> ;error(__FUNCTION__.'(): このノードには子ノードがあります。');
//ノードとそのすべての子ノードを削除します
$this->module->delete('where lft between '.$node['lft'].' と '.$node ['rgt']);
//対応する左右のキーの値を変更します
$plus=$node['rgt']-$node['lft'] 1; ->module ->query('update `'.$this->tbname.'` set lft=lft-'.$plus.' where lft>'.$node['rgt']); > $this- >module->query('update `'.$this->tbname.'` set rgt=rgt-'.$plus.' where rgt>'.$node['rgt']) ;
return true;
}
/**
* ノードを更新します
* @param array $set update set
* @param int $cid 更新されたノードの主キー ID
*/
function update($set,$cid){
return $this->module-> ;update($ set,'where cid='.$cid); > // ノード情報を取得します'rgt'];
if(!empty($deep))$where.=' および level<'.$ node['level'] $deep;
if($deep==1){
$where.=' orderstyle desc で並べ替える' 🎜> return $this->module->ここで);
}
/**
* ノードとそのサブノードを選択します
* @param int $cid ノードの主キー ID
* @param int $deep 選択の深さ
*/
function get_parent($cid)
{
$node=$this->get_by_cid( $cid) ;
return $this->module->select('where lft<='.$node['lft'].' and rgt>='.$node['rgt'].' order by lft asc');
}
/**
* 子ノードを選択します*/
function get_children($pid,$deep=0){
//获取节点情報
$pnode=$this->get_by_cid($pid) ;
$where='where lft>'.$pnode['lft'].' そしてrgt if(!empty($deep))$where.=' and level<='.($pnode['level'] $deep);
if($deep==1){
$where.=' order by orderstyle desc';
}else{
$where.='order by lft asc';
}
return $this->module->select($where);
}
/**
* 深層サブノードを取得します
* @param int $cid ノードの主キー ID
* @param int $deepselection Depth
*/
function get_level_children($pid,$deep){
//获取节点情報
$pnode=$this-> get_by_cid($pid);
$where='where lft>'.$pnode['lft'].' そしてrgt $where.=' and level='.($pnode['level'] $deep);
$where.=' order by orderstyle desc';
return $this->module->select($where);
}
/**
* ノード情報の取得
* @param $cid ノードの主キー ID
* @return array $node
*/
function get_by_cid($cid){
$node=$this->module->detail('where cid=' .$cid);
if(!$node)$this->error(__FUNCTION__.'():获取节点'.$cid.'失败!');
$node を返す;
}
/**
* 子ノードの数を取得
* @param array $node ノード情報
* @return num
*/
function child_num($node){
return ($node['rgt']-$node['lft']-1)/2 ;
}
/**
* 階層による分類を表示
* @param int $cid ノードの主キー ID
* @output
*/
function display($cid)
{
$nodes=$this->select($cid);
foreach($nodes as $node){
echo str_repeat(' ',$node['level']-1).$node['cname']."n";
}
}
/*-------private----------------------------- ------*/
function error($msg){
die('ERROR : file '.__FILE__.' function '.$msg);
}
}
?>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











スマートフォンの画面に緑色の線が表示されるというトラブルに遭遇したことがある方もいると思いますし、見たことはなくても、関連する写真をインターネット上で見たことがあるはずです。では、スマートウォッチの画面が白くなってしまう状況に遭遇したことはありますか? CNMOは4月2日、海外メディアから、Redditユーザーがサムスンウォッチシリーズのスマートウォッチの画面が白くなっている写真をソーシャルプラットフォームで共有したことを知った。ユーザーは、「出発時に充電していましたが、戻ってきたらこのようになっていました。再起動しようとしましたが、再起動プロセス中も画面はまだこのままでした。」Samsung Watch スマートウォッチの画面が白くなりました。 Reddit ユーザーはスマート ウォッチを指定していません。特定のモデルです。しかし、写真から判断すると、Samsung Watch5のはずです。以前、別のRedditユーザーも報告しました

CrystalDiskMark は、シーケンシャルおよびランダムの読み取り/書き込み速度を迅速に測定する、ハード ドライブ用の小型 HDD ベンチマーク ツールです。次に、編集者が CrystalDiskMark と Crystaldiskmark の使用方法を紹介します。 1. CrystalDiskMark の概要 CrystalDiskMark は、機械式ハード ドライブとソリッド ステート ドライブ (SSD) の読み取りおよび書き込み速度とパフォーマンスを評価するために広く使用されているディスク パフォーマンス テスト ツールです。 ). ランダム I/O パフォーマンス。これは無料の Windows アプリケーションで、使いやすいインターフェイスとハード ドライブのパフォーマンスのさまざまな側面を評価するためのさまざまなテスト モードを提供し、ハードウェアのレビューで広く使用されています。

foobar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「NetEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

ASSASSINといえば、プレイヤーの皆さんは必ず『アサシン クリード』に登場するマスターアサシンを思い浮かべると思いますが、彼らは熟練しただけではなく、「闇に身を捧げ、光に仕える」という信条を持っています。 - アプライアンス ブランド DeepCool の冷却ラジエーターが互いに一致します。このたび、シリーズ最新作「ASSASSIN4S」が登場し、上級者に新たな空冷体験をもたらす『スーツの暗殺者 アドバンスト』。外観はディテールに富んでいます. Assassin 4S ラジエーターはダブルタワー構造 + シングルファン内蔵設計を採用しています. 外側は立方体状のフェアリングで覆われており, 全体的な印象が強いです. ホワイトとブラックの2色が用意されています.さまざまな色に合う色。

春の到来とともにあらゆるものが生き返り、あらゆるものが生命力と活力に満ち溢れます。この美しい季節、家庭生活に彩りを加えるにはどうすればよいでしょうか? Haqu H2 プロジェクターは、絶妙なデザインと超コストパフォーマンスで、この春に欠かせない美しさになりました。コンパクトでありながらスタイリッシュなH2プロジェクター。リビングルームのテレビキャビネットの上に置いても、寝室のベッドサイドテーブルの隣に置いても、美しい風景になります。乳白色のマットな質感のボディは、プロジェクターの高級感を演出するだけでなく、触り心地も向上させたデザインです。ベージュのレザー風の素材が全体の外観に温かみとエレガントさを加えます。この色と素材の組み合わせは、現代の住宅の美的傾向に準拠しているだけでなく、住宅に統合することもできます。
