首頁  >  文章  >  後端開發  >  php無限極分類詳解

php無限極分類詳解

小云云
小云云原創
2018-03-20 13:09:196800瀏覽

無限極分類簡單點說就是一個類別可以分成多個子類,然後一個子類別又可以分另外多個子類這樣無限分下去,就好像windows可以新建一個資料夾,然後在這個資料夾裡又可以建一些個資料夾,在資料夾底下還可以建一些資料夾一樣。

那PHP又是如何實現它的無限分類的呢?如何把它的各個分類一一列出來呢?

首先,我們來假設有這樣一個陣列

$arr = array(    0=>array(        'cid'=>1,        'pid'=>0,        'name'=>'亚洲',
    ),    1=>array(        'cid'=>2,        'pid'=>0,        'name'=>'北美洲',
    ),    2=>array(        'cid'=>3,        'pid'=>1,        'name'=>'中国',
    ),    3=>array(        'cid'=>4,        'pid'=>2,        'name'=>'美国',
    ),    4=>array(        'cid'=>5,        'pid'=>3,        'name'=>'北京',
    ),    5=>array(        'cid'=>6,        'pid'=>3,        'name'=>'河北',
    ),    6=>array(        'cid'=>7,        'pid'=>5,        'name'=>'东城区',
    ),    7=>array(        'cid'=>8,        'pid'=>5,        'name'=>'海淀区',
    ),
);

我們這裡需要一個類似這樣的展示效果如圖
php無限極分類詳解

如果我們要想將這個數組如上圖般很直觀的表現出來的話就需要用php的遞歸來實現,那麼要怎麼實現呢?看下面的核心程式碼

複製程式碼

private function GetTree($arr,$pid,$step){
    global $tree;    foreach($arr as $key=>$val) {        if($val['pid'] == $pid) {            $flg = str_repeat('└―',$step);            $val['name'] = $flg.$val['name'];            $tree[] = $val;            $this->GetTree($arr , $val['cid'] ,$step+1);
        }
    }    return $tree;
}

複製程式碼
然後我們只需要寫一個呼叫的程式碼就好

$newarr = $this->GetTree($arr, 0, 0);

根據子類別id找出所有父級分類資訊(yii2框架中)

方法一:

public static function get_parent_list($arr,$id){
        //$arr 所有分类列表
        //$id 父级分类id
        static $list=array();        foreach($arr as $u){            if($u['id']== $id){//父级分类id等于所查找的id
                $list[]=$u;                if($u['parent_id']>0){                    self::get_parent_list($arr,$u['parent_id']);

                }
            }
        }       return $list;
    }

這樣可以把分類資訊儲存到快取裡,而不需要遞迴查詢。
方法二:遞迴查詢取分類資訊

    public static function get_parents($id){
        static $list = [];        $cat_data = Category::findOne($id)->toarray();        if($cat_data){            $list[] = $cat_data;                    $id = $cat_data['parent_id'];                    if($cat_data['parent_id'] > 0){                            self::get_parents($id);
                    }
        }        return $list;
    }

由於需要實現無限級分類,所以我們需要知道它的子欄位有什麼?

最後實作的陣列是這樣的形式:

[php] view plain copyArray  (  
    [0] => Array  
        (  
            [category_id] => 1  
            [category_name] => 关于我  
            [category_pid] => 0  
            [category_addtime] => 0  
            [category_order] => 0  
        )  

    [1] => Array  
        (  
            [category_id] => 2  
            [category_name] => 生活随笔  
            [category_pid] => 0  
            [category_addtime] => 0  
            [category_order] => 0  
        )  

    [2] => Array  
        (  
            [category_id] => 3  
            [category_name] => 文章类别  
            [category_pid] => 0  
            [category_addtime] => 0  
            [category_order] => 0  
            [category_child] => Array  
                (  
                    [0] => Array  
                        (  
                            [category_id] => 4  
                            [category_name] => Linux服务器  
                            [category_pid] => 3  
                            [category_addtime] => -28800  
                            [category_order] => 1  
                            [category_child] => Array  
                                (  
                                    [0] => Array  
                                        (  
                                            [category_id] => 5  
                                            [category_name] => linux优化  
                                            [category_pid] => 4  
                                            [category_addtime] => 0  
                                            [category_order] => 0  
                                        )  

                                    [1] => Array  
                                        (  
                                            [category_id] => 6  
                                            [category_name] => 虚拟化  
                                            [category_pid] => 4  
                                            [category_addtime] => 1478228220  
                                            [category_order] => 0  
                                        )  

                                    [2] => Array  
                                        (  
                                            [category_id] => 7  
                                            [category_name] => Mysql优化与开发  
                                            [category_pid] => 4  
                                            [category_addtime] => 1478188800  
                                            [category_order] => 0  
                                        )  

                                    [3] => Array  
                                        (  
                                            [category_id] => 8  
                                            [category_name] => 高可用与虚拟化  
                                            [category_pid] => 4  
                                            [category_addtime] => 1478394120  
                                            [category_order] => 0  
                                        )  

                                )  

                        )  

                    [1] => Array  
                        (  
                            [category_id] => 15  
                            [category_name] => Mysql  
                            [category_pid] => 3  
                            [category_addtime] => 1480555980  
                            [category_order] => 0  
                            [category_child] => Array  
                                (  
                                    [0] => Array  
                                        (  
                                            [category_id] => 16  
                                            [category_name] => 优化  
                                            [category_pid] => 15  
                                            [category_addtime] => 1480555980  
                                            [category_order] => 0  
                                        )  

                                    [1] => Array  
                                        (  
                                            [category_id] => 17  
                                            [category_name] => Sql编程  
                                            [category_pid] => 15  
                                            [category_addtime] => 1480556040  
                                            [category_order] => 8  
                                        )  

                                )  

                        )  

                )  

        )  

)

那麼我們從資料庫中取出來的二維陣列如何變成上面這樣的陣列呢?
舉例:

我們要把下面這個二維陣列實現成上面那種形式。

[php] view plain copy

$arr=array(    
    array('id'=>'1','name'=>'北京','pid'=>'0'),    
    array('id'=>'2','name'=>'上海','pid'=>'0'),    
    array('id'=>'3','name'=>'浦东','pid'=>'2'),    
    array('id'=>'4','name'=>'朝阳','pid'=>'1'),    
    array('id'=>'5','name'=>'广州','pid'=>'0'),    
    array('id'=>'6','name'=>'三里屯','pid'=>'4'),   
    array('id'=>'7','name'=>'广东','pid'=>'5'),   
    array('id'=>'8','name'=>'三里','pid'=>'4'),  
    array('id'=>'10','name'=>'小胡同','pid'=>'8')  
    );

第一種方法:利用陣列的索引與主鍵的id號相同來找出子欄位,首先為陣列加上索引:

#[php] view plain copy

$arr=array(    
    1=>array('id'=>'1','name'=>'北京','pid'=>'0'),    
    2=>array('id'=>'2','name'=>'上海','pid'=>'0'),    
    3=>array('id'=>'3','name'=>'浦东','pid'=>'2'),    
    4=>array('id'=>'4','name'=>'朝阳','pid'=>'1'),    
    5=>array('id'=>'5','name'=>'广州','pid'=>'0'),    
    6=>array('id'=>'6','name'=>'三里屯','pid'=>'4'),   
    7=>array('id'=>'7','name'=>'广东','pid'=>'5'),   
    8=>array('id'=>'8','name'=>'三里','pid'=>'4'),  
    10=>array('id'=>'10','name'=>'小胡同','pid'=>'8')  
    );

利用索引的下標,判斷該欄目是否存在父欄目,如果存在就把該欄目放到父欄目的son子數組裡面
[php] view plain copy

function generateTree($items){  
    $tree = array();  
    foreach($items as $item){  
        //判断是否有数组的索引==  
        if(isset($items[$item['pid']])){     //查找数组里面是否有该分类  如 isset($items[0])  isset($items[1])  
            $items[$item['pid']]['son'][] = &$items[$item['id']]; //上面的内容变化,$tree里面的值就变化  
        }else{  
            $tree[] = &$items[$item['id']];   //把他的地址给了$tree  
        }    
    }  
    return $tree;  
}

上面這個程式有一個主要問題,數組的索引是我們手動添加的?那我們可不可以自動加入數組索引呢?當然可以,下面這個程式就實現了,自動為數組添加索引然後再把子欄目放到父欄目的son數組中,思想和上面的程式是一樣的

[php] view plain copy

function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){  
    $tree=array();   
    $packData=array();  
    foreach ($list as  $data) {  

    <span style="white-space:pre">    </span>//转换为带有主键id的数组  
        $packData[$data[$pk]] = $data; //$packData[1]=$data; $packData[2]=$data   
    }  
    foreach ($packData as $key =>$val){       
        if($val[$pid]==$root){   //代表跟节点         
            $tree[]=& $packData[$key];  
        }else{  
            //找到其父类  
            $packData[$val[$pid]][$child][]=& $packData[$key];  
        }  
    }  
    return $tree;  
}

第二種方法:使用遞歸來查找子欄
想法:使用遞歸來查找每個欄位中的子欄目,直到找到最後一個子欄位以後再一層層往外運行調試的話,可以印出

tree中,,為了方便理解,可以印出$tree去觀察陣列的變化

[php] view plain copy

array(&#39;id&#39;=>&#39;6&#39;,&#39;name&#39;=>&#39;三里屯&#39;,&#39;pid&#39;=>&#39;4&#39;),   
[php] view plain copyfunction make_tree1($list,$pk=&#39;id&#39;,$pid=&#39;pid&#39;,$child=&#39;_child&#39;,$root=0){  
    $tree=array();  
    foreach($list as $key=> $val){  
        if($val[$pid]==$root){  
            //获取当前$pid所有子类   
                unset($list[$key]);  
                if(! empty($list)){  
                    $child=make_tree1($list,$pk,$pid,$child,$val[$pk]); //来来来 找北京的子栏目 递归 空  

                    if(!empty($child)){  
                        $val[&#39;_child&#39;]=$child;  
                    }  
                }                
                $tree[]=$val;  
        }  
    }     
    return $tree;  
}

為了更好的理解遞歸,大家可以找一個小程式測試一下例如下面這個求和的程式
大家可以分析一下$n的輸出從2,3 …..10,而不是從10,9—-2,我從這個程式才理解了一下上面那個程式的遞歸是如何實現的,總之:遞歸是很有意思的一個東西,希望大家好好理解
[php] view plain copy

        function sum($n){  
            $a=0;  
            if($n>1){     
                $a=sum($n-1)+$n;  

                /*if($n>5){ 
                    echo "$n <br />" ; 
                }*/  
                echo "$n<br />";  
            }else{  
                $a=1;  
            }  

            return $a;  
        }  
        echo sum(10);

根據父id取得所有下級子類別id的資料

#$id = 父级id, $array = 所有分类public function getSon($id,$array){
        static $list;        foreach ($array as $k => $v) {            if($v[&#39;parent_id&#39;] == $id){                $list[] = $array[$k];                self::getSon($v[&#39;id&#39;],$array);
            }
        }        return $list;
}

           

#php無限極分類
這裡先介紹一下,什麼是無限極分類?

無限極分類簡單點說就是一個類別可以分成多個子類,然後一個子類又可以分另外多個子類這樣無限分下去,就好像windows可以新建一個資料夾,然後在這個資料夾裡又可以建一些個資料夾,在資料夾底下還可以建一些資料夾一樣

那PHP又是如何實現它的無限分類的呢?如何把它的各個分類一一列出來呢?

首先,我們來假設有這樣一個陣列

$arr = array(    0=>array(        &#39;cid&#39;=>1,        &#39;pid&#39;=>0,        &#39;name&#39;=>&#39;亚洲&#39;,
    ),    1=>array(        &#39;cid&#39;=>2,        &#39;pid&#39;=>0,        &#39;name&#39;=>&#39;北美洲&#39;,
    ),    2=>array(        &#39;cid&#39;=>3,        &#39;pid&#39;=>1,        &#39;name&#39;=>&#39;中国&#39;,
    ),    3=>array(        &#39;cid&#39;=>4,        &#39;pid&#39;=>2,        &#39;name&#39;=>&#39;美国&#39;,
    ),    4=>array(        &#39;cid&#39;=>5,        &#39;pid&#39;=>3,        &#39;name&#39;=>&#39;北京&#39;,
    ),    5=>array(        &#39;cid&#39;=>6,        &#39;pid&#39;=>3,        &#39;name&#39;=>&#39;河北&#39;,
    ),    6=>array(        &#39;cid&#39;=>7,        &#39;pid&#39;=>5,        &#39;name&#39;=>&#39;东城区&#39;,
    ),    7=>array(        &#39;cid&#39;=>8,        &#39;pid&#39;=>5,        &#39;name&#39;=>&#39;海淀区&#39;,
    ),
);

我們這裡需要一個類似這樣的展示效果如圖
php無限極分類詳解

如果我們要想將這個數組如上圖般很直觀的表現出來的話就需要用php的遞歸來實現,那麼要怎麼實現呢?看下面的核心程式碼

複製程式碼

private function GetTree($arr,$pid,$step){
    global $tree;    foreach($arr as $key=>$val) {        if($val[&#39;pid&#39;] == $pid) {            $flg = str_repeat(&#39;└―&#39;,$step);            $val[&#39;name&#39;] = $flg.$val[&#39;name&#39;];            $tree[] = $val;            $this->GetTree($arr , $val[&#39;cid&#39;] ,$step+1);
        }
    }    return $tree;
}

複製程式碼
然後我們只需要寫一個呼叫的程式碼就好

$newarr = $this->GetTree($arr, 0, 0);

根據子類別id找出所有父級分類資訊(yii2框架中)

方法一:

public static function get_parent_list($arr,$id){
        //$arr 所有分类列表
        //$id 父级分类id
        static $list=array();        foreach($arr as $u){            if($u[&#39;id&#39;]== $id){//父级分类id等于所查找的id
                $list[]=$u;                if($u[&#39;parent_id&#39;]>0){                    self::get_parent_list($arr,$u[&#39;parent_id&#39;]);

                }
            }
        }       return $list;
    }

這樣可以把分類資訊儲存到快取裡,而不需要遞迴查詢。
方法二:遞迴查詢取分類資訊

    public static function get_parents($id){
        static $list = [];        $cat_data = Category::findOne($id)->toarray();        if($cat_data){            $list[] = $cat_data;                    $id = $cat_data[&#39;parent_id&#39;];                    if($cat_data[&#39;parent_id&#39;] > 0){                            self::get_parents($id);
                    }
        }        return $list;
    }

由於需要實現無限級分類,所以我們需要知道它的子欄位有什麼?

最後實作的陣列是這樣的形式:

[php] view plain copyArray  (  
    [0] => Array  
        (  
            [category_id] => 1  
            [category_name] => 关于我  
            [category_pid] => 0  
            [category_addtime] => 0  
            [category_order] => 0  
        )  

    [1] => Array  
        (  
            [category_id] => 2  
            [category_name] => 生活随笔  
            [category_pid] => 0  
            [category_addtime] => 0  
            [category_order] => 0  
        )  

    [2] => Array  
        (  
            [category_id] => 3  
            [category_name] => 文章类别  
            [category_pid] => 0  
            [category_addtime] => 0  
            [category_order] => 0  
            [category_child] => Array  
                (  
                    [0] => Array  
                        (  
                            [category_id] => 4  
                            [category_name] => Linux服务器  
                            [category_pid] => 3  
                            [category_addtime] => -28800  
                            [category_order] => 1  
                            [category_child] => Array  
                                (  
                                    [0] => Array  
                                        (  
                                            [category_id] => 5  
                                            [category_name] => linux优化  
                                            [category_pid] => 4  
                                            [category_addtime] => 0  
                                            [category_order] => 0  
                                        )  

                                    [1] => Array  
                                        (  
                                            [category_id] => 6  
                                            [category_name] => 虚拟化  
                                            [category_pid] => 4  
                                            [category_addtime] => 1478228220  
                                            [category_order] => 0  
                                        )  

                                    [2] => Array  
                                        (  
                                            [category_id] => 7  
                                            [category_name] => Mysql优化与开发  
                                            [category_pid] => 4  
                                            [category_addtime] => 1478188800  
                                            [category_order] => 0  
                                        )  

                                    [3] => Array  
                                        (  
                                            [category_id] => 8  
                                            [category_name] => 高可用与虚拟化  
                                            [category_pid] => 4  
                                            [category_addtime] => 1478394120  
                                            [category_order] => 0  
                                        )  

                                )  

                        )  

                    [1] => Array  
                        (  
                            [category_id] => 15  
                            [category_name] => Mysql  
                            [category_pid] => 3  
                            [category_addtime] => 1480555980  
                            [category_order] => 0  
                            [category_child] => Array  
                                (  
                                    [0] => Array  
                                        (  
                                            [category_id] => 16  
                                            [category_name] => 优化  
                                            [category_pid] => 15  
                                            [category_addtime] => 1480555980  
                                            [category_order] => 0  
                                        )  

                                    [1] => Array  
                                        (  
                                            [category_id] => 17  
                                            [category_name] => Sql编程  
                                            [category_pid] => 15  
                                            [category_addtime] => 1480556040  
                                            [category_order] => 8  
                                        )  

                                )  

                        )  

                )  

        )  

)

那麼我們從資料庫中取出來的二維陣列如何變成上面這樣的陣列呢?
舉例:

我們要把下面這個二維陣列實現成上面那種形式。

[php] view plain copy

$arr=array(    
    array(&#39;id&#39;=>&#39;1&#39;,&#39;name&#39;=>&#39;北京&#39;,&#39;pid&#39;=>&#39;0&#39;),    
    array(&#39;id&#39;=>&#39;2&#39;,&#39;name&#39;=>&#39;上海&#39;,&#39;pid&#39;=>&#39;0&#39;),    
    array(&#39;id&#39;=>&#39;3&#39;,&#39;name&#39;=>&#39;浦东&#39;,&#39;pid&#39;=>&#39;2&#39;),    
    array(&#39;id&#39;=>&#39;4&#39;,&#39;name&#39;=>&#39;朝阳&#39;,&#39;pid&#39;=>&#39;1&#39;),    
    array(&#39;id&#39;=>&#39;5&#39;,&#39;name&#39;=>&#39;广州&#39;,&#39;pid&#39;=>&#39;0&#39;),    
    array(&#39;id&#39;=>&#39;6&#39;,&#39;name&#39;=>&#39;三里屯&#39;,&#39;pid&#39;=>&#39;4&#39;),   
    array(&#39;id&#39;=>&#39;7&#39;,&#39;name&#39;=>&#39;广东&#39;,&#39;pid&#39;=>&#39;5&#39;),   
    array(&#39;id&#39;=>&#39;8&#39;,&#39;name&#39;=>&#39;三里&#39;,&#39;pid&#39;=>&#39;4&#39;),  
    array(&#39;id&#39;=>&#39;10&#39;,&#39;name&#39;=>&#39;小胡同&#39;,&#39;pid&#39;=>&#39;8&#39;)  
    );

第一種方法:利用陣列的索引與主鍵的id號相同來找出子欄位,首先為陣列加上索引:

#[php] view plain copy

$arr=array(    
    1=>array(&#39;id&#39;=>&#39;1&#39;,&#39;name&#39;=>&#39;北京&#39;,&#39;pid&#39;=>&#39;0&#39;),    
    2=>array(&#39;id&#39;=>&#39;2&#39;,&#39;name&#39;=>&#39;上海&#39;,&#39;pid&#39;=>&#39;0&#39;),    
    3=>array(&#39;id&#39;=>&#39;3&#39;,&#39;name&#39;=>&#39;浦东&#39;,&#39;pid&#39;=>&#39;2&#39;),    
    4=>array(&#39;id&#39;=>&#39;4&#39;,&#39;name&#39;=>&#39;朝阳&#39;,&#39;pid&#39;=>&#39;1&#39;),    
    5=>array(&#39;id&#39;=>&#39;5&#39;,&#39;name&#39;=>&#39;广州&#39;,&#39;pid&#39;=>&#39;0&#39;),    
    6=>array(&#39;id&#39;=>&#39;6&#39;,&#39;name&#39;=>&#39;三里屯&#39;,&#39;pid&#39;=>&#39;4&#39;),   
    7=>array(&#39;id&#39;=>&#39;7&#39;,&#39;name&#39;=>&#39;广东&#39;,&#39;pid&#39;=>&#39;5&#39;),   
    8=>array(&#39;id&#39;=>&#39;8&#39;,&#39;name&#39;=>&#39;三里&#39;,&#39;pid&#39;=>&#39;4&#39;),  
    10=>array(&#39;id&#39;=>&#39;10&#39;,&#39;name&#39;=>&#39;小胡同&#39;,&#39;pid&#39;=>&#39;8&#39;)  
    );

利用索引的下标,判断该栏目是否存在父栏目,如果存在就把该栏目放到父栏目的son子数组里面
[php] view plain copy

function generateTree($items){  
    $tree = array();  
    foreach($items as $item){  
        //判断是否有数组的索引==  
        if(isset($items[$item[&#39;pid&#39;]])){     //查找数组里面是否有该分类  如 isset($items[0])  isset($items[1])  
            $items[$item[&#39;pid&#39;]][&#39;son&#39;][] = &$items[$item[&#39;id&#39;]]; //上面的内容变化,$tree里面的值就变化  
        }else{  
            $tree[] = &$items[$item[&#39;id&#39;]];   //把他的地址给了$tree  
        }    
    }  
    return $tree;  
}

上面这个程序有一个主要问题,数组的索引是我们手动添加的?那我们可不可以自动添加数组索引呢?当然可以,下面这个程序就实现了,自动为数组添加索引然后再把子栏目放到父栏目的son数组中,思想和上面的程序是一样的

[php] view plain copy

function make_tree($list,$pk=&#39;id&#39;,$pid=&#39;pid&#39;,$child=&#39;_child&#39;,$root=0){  
    $tree=array();   
    $packData=array();  
    foreach ($list as  $data) {  

    <span style="white-space:pre">    </span>//转换为带有主键id的数组  
        $packData[$data[$pk]] = $data; //$packData[1]=$data; $packData[2]=$data   
    }  
    foreach ($packData as $key =>$val){       
        if($val[$pid]==$root){   //代表跟节点         
            $tree[]=& $packData[$key];  
        }else{  
            //找到其父类  
            $packData[$val[$pid]][$child][]=& $packData[$key];  
        }  
    }  
    return $tree;  
}

第二种方法:使用递归来查找子栏目
思想:使用递归来查找每个栏目中的子栏目,直到找到最后一个子栏目以后再一层层往外运行调试的话,可以打印

tree中,,为了方便理解,可以打印$tree去观察数组的变化

[php] view plain copy

array(&#39;id&#39;=>&#39;6&#39;,&#39;name&#39;=>&#39;三里屯&#39;,&#39;pid&#39;=>&#39;4&#39;),   
[php] view plain copyfunction make_tree1($list,$pk=&#39;id&#39;,$pid=&#39;pid&#39;,$child=&#39;_child&#39;,$root=0){  
    $tree=array();  
    foreach($list as $key=> $val){  
        if($val[$pid]==$root){  
            //获取当前$pid所有子类   
                unset($list[$key]);  
                if(! empty($list)){  
                    $child=make_tree1($list,$pk,$pid,$child,$val[$pk]); //来来来 找北京的子栏目 递归 空  

                    if(!empty($child)){  
                        $val[&#39;_child&#39;]=$child;  
                    }  
                }                
                $tree[]=$val;  
        }  
    }     
    return $tree;  
}

为了更好的理解递归,大家可以找一个小程序测试一下例如下面这个求和的程序
大家可以分析一下$n的输出从2,3 …..10,而不是从10,9—-2,我从这个程序才理解了一下上面那个程序的递归是如何实现的,总之:递归是很有意思的一个东西,希望大家好好理解
[php] view plain copy

        function sum($n){  
            $a=0;  
            if($n>1){     
                $a=sum($n-1)+$n;  

                /*if($n>5){ 
                    echo "$n <br />" ; 
                }*/  
                echo "$n<br />";  
            }else{  
                $a=1;  
            }  

            return $a;  
        }  
        echo sum(10);

根据父id获得所有下级子类id的数据

#$id = 父级id, $array = 所有分类public function getSon($id,$array){
        static $list;        foreach ($array as $k => $v) {            if($v[&#39;parent_id&#39;] == $id){                $list[] = $array[$k];                self::getSon($v[&#39;id&#39;],$array);
            }
        }        return $list;
}

相关推荐:

php无限极分类生成分类树的实现方法介绍

php无限极分类入门教程

PHP无限极分类函数的实现方法实例详解

以上是php無限極分類詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn