php實現分類
Ⅰ php無限極分類實現的方法
初始化的數據
//初始化原始數據(id=>編號,name=>顯示名稱,pid=>父級目錄id,sort=>排序順序)$data[1]=array('id'=>'1','name'=>'一級目錄A','pid'=>'0','sort'=>'1');
$data[2]=array('id'=>'2','name'=>'一級目錄B','pid'=>'0','sort'=>'2');
$data[3]=array('id'=>'3','name'=>'一級目錄C','pid'=>'0','sort'=>'3');
$data[4]=array('id'=>'4','name'=>'一級目錄D','pid'=>'0','sort'=>'4');
$data[5]=array('id'=>'5','name'=>'二級目錄A-1','pid'=>'1','sort'=>'1');
$data[6]=array('id'=>'6','name'=>'二級目錄A-2','pid'=>'1','sort'=>'2');
$data[7]=array('id'=>'7','name'=>'二級目錄A-3','pid'=>'1','sort'=>'3');
$data[8]=array('id'=>'8','name'=>'二級目錄B-1','pid'=>'2','sort'=>'1');
$data[9]=array('id'=>'9','name'=>'二級目錄B-2','pid'=>'2','sort'=>'2');
$data[10]=array('id'=>'10','name'=>'二級目錄B-3','pid'=>'2','sort'=>'3');
$data[11]=array('id'=>'11','name'=>'二級目錄C-1','pid'=>'3','sort'=>'2');
$data[12]=array('id'=>'12','name'=>'二級目錄D-1','pid'=>'4','sort'=>'1');
$data[13]=array('id'=>'13','name'=>'二級目錄D-2','pid'=>'4','sort'=>'2');
$data[14]=array('id'=>'14','name'=>'三級目錄A-2-1','pid'=>'6','sort'=>'1');
$data[15]=array('id'=>'15','name'=>'三級目錄A-2-2','pid'=>'6','sort'=>'2');
$data[16]=array('id'=>'16','name'=>'三級目錄C-1-1','pid'=>'11','sort'=>'1');
$data[17]=array('id'=>'17','name'=>'三級目錄B-2-1','pid'=>'9','sort'=>'2');
顯示樹結構
functionprintTree($data,$level=0){foreach($dataas$key=>$value){for($i=0;$i<=$level;$i++){echo'  ';
}echo$value['name'];echo'<br>';if(!empty($value['children'])){
printTree($value['children'],$level+1);
}
}
}
使用遞歸的方式獲取無限極分類數組
functiongetNodeTree(&$list,&$tree,$pid=0){foreach($listas$key=>$value){if($pid==$value['pid']){
$tree[$value['id']]=$value;unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}
使用引用-無限極分類
functioncreateNodeTree(&$list,&$tree){foreach($listas$key=>$node){if(isset($list[$node['pid']])){
$list[$node['pid']]['children'][]=&$list[$key];
}else{
$tree[]=&$list[$node['id']];
}
}
}
調用
//遞歸-無限極分類調用getNodeTree($data,$tree);
printTree($tree);//使用引用-無限極分類調用createNodeTree($data,$tree);
printTree($tree);
Ⅱ 個性化的分類推薦,用php如何實現
如何在沒有大量用戶數據的情況下設計個性化推薦系統並讓用戶對推薦結果滿意從而願意使用推薦系統,就是冷啟動問題。
1. 分類(3類):
1)用戶冷啟動:如何給新用戶做個性化推薦
2)物品冷啟動:如何將新物品推薦給可能對其感興趣的用戶。在新聞網站等時效性很強的網站中非常重要。
3)系統冷啟動:如何在一個新開發的網站上設計個性化推薦,從而在網站剛發布時就讓用戶體驗到個性化推薦服務。沒有用戶,只有一些物品信息。
Ⅲ php怎麼編輯分類
每個分類應該有一個對應的父id,把資料庫里對應子分類的父id換成想要更改成的父分類的id這樣就關聯起來了吧。一個update語句的事兒
Ⅳ php 如何做菜單分類系統
這個很簡單
1:數據在資料庫中有這幾個欄位,id,parentid,name,
2:如果是一級分類parentid=0
3:獲得分類
$result=mysql_query('select * from category where parentid=0 ');
$category=array();
while($row = mysql_fetch_array($result))
{
$result2=mysql_query("select * from category where parentid='".$row['id']."' limit 10 ");
$child=array();
while($row2 = mysql_fetch_array($result2))
{
$child[]=$row2;
}
$row['child']=$child;
$category[]=$row;
}
category這個就是該分類的數組
希望我的回答能給你幫助
-----君少
Ⅳ 如何使用PHP實現無限級分類
你還在用浪費時間又浪費內存的遞歸遍歷無限極分類嗎,看了該篇文章,我覺得你應該換換了。
這是我在OSChina上看到的一段非常精簡的PHP無限極分類生成樹方法,巧在引用,整理分享了。
復制代碼代碼如下:
function generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '長豐縣'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),
);
print_r(generateTree($items));
可以看到下面列印的結果:
復制代碼代碼如下:
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 安徽省
[son] => Array
(
[0] => Array
(
[id] => 3
[pid] => 1
[name] => 合肥市
[son] => Array
(
[0] => Array
(
[id] => 4
[pid] => 3
[name] => 長豐縣
)
)
)
[1] => Array
(
[id] => 5
[pid] => 1
[name] => 安慶市
)
)
)
[1] => Array
(
[id] => 2
[pid] => 0
[name] => 浙江省
)
)
上面生成樹方法還可以精簡到5行:
復制代碼代碼如下:
function generateTree($items){
foreach($items as $item)
$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
return isset($items[0]['son']) ? $items[0]['son'] : array();
}
上面這種無限極分類數據樹形結構化的方法值得借鑒。但是我覺得這段代碼實際用途並不明顯啊,你想取出格式化的樹形數據還是要遞歸啊:
復制代碼代碼如下:
/**
* 如何取數據格式化的樹形數據
*/
$tree = generateTree($items);
function getTreeData($tree){
foreach($tree as $t){
echo $t['name'].'<br>';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
getTreeData($tree);
Ⅵ PHP如何通過傳引用的思想實現無限分類(代碼
在我的Simpla中,用到了無限分類,使用了PHP的傳引用思想實現無限分類的方法,可以完美展示類似這樣的分類模式。
id pid name
1 0 四川
2 0 重慶
3 1 成都
4
1 綿陽
5 3 高新區
代碼如下所示:
/**
* 數組變成無限級分類--傳引用思想
* @param array $items
* @return array
*/
public static function get_tree($orig) {
//解決下標不是1開始的問題
$items = array();
foreach ($orig as $key => $value) {
$items[$value[『id『]] = $value;
}
//開始組裝
$tree = array();
foreach ($items as $key => $item) {
if ($item[『pid『] == 0) { //為0,則為1級分類
$tree[] = &$items[$key];
} else {
if (isset($items[$item[『pid『]])) { //存在值則為二級分類
$items[$item[『pid『]][『child『][] = &$items[$key]; //傳引用直接賦值與改變
} else { //至少三級分類
//由於是傳引用思想,這里將不會有值
$tree[] = &$items[$key];
}
}
}
return $tree;
}
以上內容很簡單吧,如有錯誤或者更好的方法,希望可以相互交流。謝謝。!
Ⅶ php+mysql實現無限分類
..................................
不知道你要的分類是什麼分類
是寫一個方法實現對數據分類?
while(條件){
分類
}
條件為:如果沒有此類
Ⅷ php怎麼實現選擇了分類,子分類才能出現對應的內容。最好是 thinkphp。謝謝
thinkphp jquery與ajax實現省市縣三級聯動菜單
本示例以省市區三級聯動菜單為例:
實現步驟:
第一:先默認從資料庫中讀取所有的省份。
第二:通過jquery中的change事件,當省份的內容發生改變時,執行change事件,
通過jquery 獲得被選中的省份的value值,再後通過非同步載入數據。
第三:與第二步相似,當用戶選擇城市時,會觸發change事件,通過jquery 獲得被選中的城市的value值,再次進行非同步載入數據。
具體示例代碼如下:
RecruitmentAction.class.php
<?php
class RecruitmentAction extends Action{
public function chacity(){
$code=I('post.code');
$city=M('city')->where(array('provincecode'=>$code))->select();
echo "<option value='-1'>請選擇城市</option>";
if($city){
foreach($city as $c){
echo "<option value=".$c['code'].">".$c['name']."</option>";
}
}
}
public function chaarea(){
$code=I('post.code');
$area=M('area')->where(array('citycode'=>$code))->select();
echo "<option value='-1'>請選擇區</option>";
if($area){
foreach($area as $a){
echo "<option value=".$a['code'].">".$a['name']."</option>";
}
}
}
public function chacitydefault(){
$code=I('post.code');
$city=M('city')->where(array('provincecode'=>$code))->select();
if($city){
foreach($city as $c){
echo "<option value=".$c['code'].">".$c['name']."</option>";
}
}
}
public function chaareadefault(){
$code=I('post.code');
$area=M('area')->where(array('citycode'=>$code))->select();
if($area){
foreach($area as $a){
echo "<option value=".$a['code'].">".$a['name']."</option>";
}
}
}
?>
sendrecruitment.php
<html>
<head>
<meta charset="utf-8"/>
<title>省市縣三級聯動菜單</tilte>
<scirpt src="libs..com/jquery/1.11.1/jquery.min.js"></script>
<script>
$(function(){
$('#sheng').change(function(){
var code=$('#sheng option:selected').val();
$.post('__URL__/chacity',{'code':code},function(data){
$('#city').html(data);
})
})
$('#city').change(function(){
var code=$('#city option:selected').val();
$.post('__URL__/chaarea',{'code':code},function(data){
$('#area').html(data);
})
})
var code=$('#sheng option').eq(0).val();
$.post('__URL__/chacitydefault',{'code':code},function(data){
$('#city').html(data);
})
var areacode=110100;
$.post('__URL__/chaareadefault',{'code':areacode},function(data){
$('#area').html(data);
})
})
</script>
</head>
<body>
<?php
$m=M('province');
$p=$m->order('id asc')->select();
?>
<!-- <input type="text" name="jobplace" value="" />
--> <select name="job_province" id="sheng" style="width:100px;">
<?php
if($p){
foreach($p as $v){
?>
<option value="<?php echo $v['code'];?>"><?php echo $v['name'];?></option>
<?php
}
}
?>
</select>
<select name="job_city" id="city" style="width:100px;"></select>
<select name="job_area" id="area" style="width:100px;"></select>
</body>
</html>
註:本示例中,控制器部分:chacitydefault(),chaareadefault()方法是為了默認頁面載入時,執行一次,讓省,市,與區進行顯示。
這是我以前學習時找的的一個DEMO 你可以參考一下
就該對你有用
希望能夠幫到你
Ⅸ 求用php實現京東商品分類菜單方法。。
題主,如果是樣式的問題的話,你可以仔細看看京東首頁的源碼,你看每一個子分類他其實都是有固定的命名規范的,也就是說京東的後台可能是根據分類所選擇的樣式來判定的..
當然,從京東首頁的分類來看,顯示的第一排序分類包含多個,而第二排序則也是包含多個
按這種結構來看,本人很懷疑京東是使用了四級的菜單分類,而至於每級分類的廣告圖樣及推薦品牌之類的,那就是功能性的設置了..
簡單的來講:
## 樣式方面
+ 參考京東首頁的相關源碼即可
+ 配合 JS 或者 是根本不用 JS 而採用 Hover
+ 考慮到兼容性問題,建議採用 JS
## 結構方面
+ 考慮菜單的四級架構
+ 參考多級分類查找上級分類的原理
+ 菜單可選擇對應的樣式..
Ⅹ php 幾種常用的遞歸 無限極分類
/**
*遞歸實現無限極分類
*@param$array分類數據
*@param$pid父ID
*@param$level分類級別
*@return$list分好類的數組直接遍歷即可$level可以用來遍歷縮進
*/
functiongetTree($array,$pid=0,$level=0){
//聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
static$list=[];foreach($arrayas$key=>$value){//第一次遍歷,找到父節點為根節點的節點也就是pid=0的節點
if($value['pid']==$pid){//父節點為根節點的節點,級別為0,也就是第一級
$value['level']=$level;//把數組放到list中
$list[]=$value;//把這個節點從數組中移除,減少後續遞歸消耗
unset($array[$key]);//開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1
getTree($array,$value['id'],$level+1);
}
}