引用:http://www.phpchina.com/bbs/thread-25541-1-15.html
这里面用eval来把数组元素按点存储,从而实现无限分级效果
- class m_layer {
- /**
- * 无限分类
- *
- * @param object $mdb
- * @param string $table
- * @param string $label_colum
- * @return array
- */
- function get_layer($layer, $label_colum = 'label') {
- $new_layer = array();
- if (!is_array($layer) || !is_array(current($layer)) || !array_key_exists($label_colum, current($layer))) {
- return array();
- }
- foreach ($layer as $row) {
- $row_str = '';
- foreach ($row as $key => $value) {
- $row_str .= ",'$key' => '$value'";
- }
- $row_str = "array(" . substr($row_str, 1) . ')';
- $label_arr = explode('-', $row[$label_colum]);
- $layer_str = '$new_layer';
- foreach ($label_arr as $label) {
- if (intval($label)) {
- $layer_str .= "['child']['$label']";
- }
- }
- eval("$layer_str=$row_str;echo strip_tags(/"/$layer_str=/$row_str/");");
- echo '<br />';
- }
- return $new_layer['child'];
- }
- /**
- * 获取new layer 相当于 mysql_insert_id 的用法
- *
- * @param object $mdb
- * @param string $table
- * @param string $father_label
- * @param string $label_colum
- * @return array
- */
- function get_new_layer($mdb, $table, $father_label, $label_colum = 'label') {
- $count = $father_label ? count(explode('-', $father_label)) : 0;
- $size = strlen($father_label);
- $sql = "SELECT $label_colum FROM $table WHERE LEFT($label_colum, $size) = '$father_label' ORDER BY $label_colum DESC";
- $rs = $mdb->fetch_row($sql);
- $last_label_arr = explode('-', $rs[$label_colum]);
- $last_label = '';
- for ($i = 0; $i <= $count; $i++) {
- $last_label .= '-' . $last_label_arr[$i];
- }
- $last_label = substr($last_label, 1);
- $new_label = explode('-', $last_label);
- $num = array_pop($new_label);
- $new_label = implode('-', $new_label) . '-' . ++$num;
- return $new_label;
- }
- }
- $label[] = array('name' => '游戏世家', 'layer' => '01');
- $label[] = array('name' => '网络游戏', 'layer' => '01-01');
- $label[] = array('name' => '卡丁车', 'layer' => '01-01-01');
- $label[] = array('name' => '泡泡堂', 'layer' => '01-01-02');
- $label[] = array('name' => '单机游戏', 'layer' => '01-02');
- $label[] = array('name' => '生化危机', 'layer' => '01-02-01');
- $label[] = array('name' => '盟军敢死队', 'layer' => '01-02-02');
- $label[] = array('name' => '超级玛丽', 'layer' => '01-02-02');
- $label[] = array('name' => '娱乐休闲', 'layer' => '02');
- $label[] = array('name' => '音乐之家', 'layer' => '02-01');
- $label[] = array('name' => '周杰伦', 'layer' => '02-01-01');
- $label[] = array('name' => '刘若英', 'layer' => '02-01-02');
- $label[] = array('name' => '书香门第', 'layer' => '02-02');
- $label[] = array('name' => '小说', 'layer' => '02-02-01');
- $label[] = array('name' => '长篇小说', 'layer' => '02-02-01-01');
- $label[] = array('name' => '短篇小说', 'layer' => '02-02-01-02');
- $label[] = array('name' => '杂志', 'layer' => '02-02-02');
- $layeray = m_layer::get_layer($label, 'layer');
- print_r($layeray);
- ?>