在使用 PHP 進行開發的過程中,無限分類是一個常見且重要的需求。為了方便使用和操作,我們通常將無限分類轉換為陣列形式。以下介紹如何將無限分類資料轉換為陣列形式。
在開始之前,我們需要確立無限分類資料的格式。一般而言,一個基本的無限分類資料格式由下列幾個欄位構成:
例如,一個簡單的無限分類資料如下:
[ ['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], ]
我們可以定義一個遞歸函數,將無限分類資料轉換為數組形式。函數的程式碼如下:
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
陣列中刪除。
使用上面定義的轉換函數,我們可以將無限分類資料轉換為陣列形式。例如,我們執行以下程式碼:
$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中文網其他相關文章!