首頁  >  文章  >  後端開發  >  php如何將無限分類資料轉換為陣列形式

php如何將無限分類資料轉換為陣列形式

PHPz
PHPz原創
2023-04-18 15:20:21501瀏覽

在使用 PHP 進行開發的過程中,無限分類是一個常見且重要的需求。為了方便使用和操作,我們通常將無限分類轉換為陣列形式。以下介紹如何將無限分類資料轉換為陣列形式。

  1. 定義無限分類資料格式

在開始之前,我們需要確立無限分類資料的格式。一般而言,一個基本的無限分類資料格式由下列幾個欄位構成:

  • id: 唯一標識符,一般為自增 ID。
  • name: 分類名稱。
  • pid: 上級分類 ID,如果是第一級分類則為 0。
  • level: 分類級別,如果是第一級分類則為 1。

例如,一個簡單的無限分類資料如下:

[
    ['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
    ['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
    ['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
    ['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
    ['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
]
  1. #定義轉換函數

我們可以定義一個遞歸函數,將無限分類資料轉換為數組形式。函數的程式碼如下:

function categoryToTree($source, $parentId = 0) {   
    $result = [];
   
    foreach ($source as $key => $value) {
        if ($value['pid'] == $parentId) {       
            unset($source[$key]);          
            $children = categoryToTree($source, $value['id']);     
            if (!empty($children)) {
                $value['children'] = $children;
            }
            $result[] = $value;         
        }
    }
   
    return $result;
}

我們使用了遞歸來實現無限分類的轉換。具體來說,對於每一個分類數據,我們首先判斷它是否是當前分類的子分類,如果是則將其加入到結果數組中同時遞歸處理它的子分類;否則跳過該分類,直接處理下一個分類資料。

注意,在遞歸處理子分類時,我們會將 $source 陣列傳入。為了確保每個分類只被處理一次,我們需要將已經處理過的分類資料從 $source 陣列中刪除。

  1. 執行轉換

使用上面定義的轉換函數,我們可以將無限分類資料轉換為陣列形式。例如,我們執行以下程式碼:

$data = [
    ['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
    ['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
    ['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
    ['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
    ['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
];

$result = categoryToTree($data);

print_r($result);

輸出結果如下:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 电子产品
            [pid] => 0
            [level] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 手机
                            [pid] => 1
                            [level] => 2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [name] => 智能手机
                                            [pid] => 2
                                            [level] => 3
                                        )
   
                                )
   
                        )
   
                    [1] => Array
                        (
                            [id] => 3
                            [name] => 电脑
                            [pid] => 1
                            [level] => 2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 5
                                            [name] => 笔记本电脑
                                            [pid] => 3
                                            [level] => 3
                                        )
   
                                )
   
                        )
   
                )
   
        )
   
)

可以看到,我們已經將無限分類資料轉換為了數組形式,並且每個分類都包含了它的子分類。這樣,我們就可以方便地使用數組函數處理無限分類資料了。

以上是php如何將無限分類資料轉換為陣列形式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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