PHPの無限分類の3つの方法は、関数以外の再帰的呼び出しです。

2694 ワード

php無限分類は大きく三つの方式があります。
1、データベースは親IDを設定して一意の索引を行い、関数の再帰的呼び出しを使って無限の分類を実現する。
2、データベースの設計は特定のフォーマットによって並べられ、そしてmysqlを使ってキー関数を調べます。プログラムの実現は簡単です。
3、三つ目はよく分かりません。アルゴリズムとデータ構造を使って並べます。
今日は主に第二の方法を共有しています。最初も多くの資料を探していましたが、確かに分かりにくいです。でも、最終的には分かりましたので、エッセイを書いて、この文章を通して皆さんの役に立ちたいと思います。
一、データベースの設計:
 
--
-- Table structure for table `category`
--
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catpath` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
--
-- Dumping data for table `category`
--
INSERT INTO `category` (`id`, `catpath`, `name`) VALUES
(1, '0', ' '),
(2, '0-1', 'Linux OS'),
(3, '0-1', 'Apache '),
(4, '0-1', 'MySQL '),
(5, '0-1', 'PHP '),
(6, '0-1-2', 'Linux '),
(7, '0-1-2', 'Linux '),
(8, '0-1-2', 'Linux '),
(9, '0-1-2-7', 'Linux LAMP'),
(10, '0-1-3-10', 'apache Server');
ここでは、catpathのリンク記号は固定されていないので、選択できます。などの特殊記号二、PHPコード実現:
 
$conn = mysql_connect ( 'localhost', 'root', '' );
mysql_select_db ( 'test', $conn );
mysql_query ( 'set names UTF8' );
$sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath";
$query = mysql_query ( $sql );
while ( $row = mysql_fetch_array ( $query ) ) {
/**
*
*/
/*$space = str_repeat ( '    ', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
echo $space . $row ['name'] . '<br>';*/
/**
*
*/
$space = str_repeat ( '&nbsp;&nbsp;&nbsp;&nbsp;', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
$option .= '<option value="' . $row ['id'] . '">' . $space . $row ['name'] . '</option>';
}
echo '<select name="opt">' . $option . '</select>';
上効果図:

ここにいくつかの重要な点があります。 2、2番目のところは主にphpの中のstrを使っています。repeatは空欄を巧みに設けた。間違ったところがありましたら、メールでお願いします。[email protected]メッセージ