Home > Article > Backend Development > How to convert infinite categorical data into array form in php
In the process of developing with PHP, unlimited classification is a common and important requirement. For convenience of use and operation, we usually convert infinite categories into array form. Here's how to convert infinite categorical data into array form.
Before we begin, we need to establish the format of infinite categorical data. Generally speaking, a basic infinite classification data format consists of the following fields:
For example, a simple infinite categorical data is as follows:
[ ['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], ]
We can define a recursive function that converts infinite Convert categorical data into array form. The code of this function is as follows:
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; }
We use recursion to achieve infinite classification conversion. Specifically, for each category data, we first determine whether it is a subcategory of the current category. If so, add it to the result array and process its subcategories recursively; otherwise, skip the category and process the next one directly. Categorized data.
Note that when processing subcategories recursively, we will pass in the $source
array. In order to ensure that each category is processed only once, we need to delete the processed category data from the $source
array.
Using the conversion function defined above, we can convert infinite categorical data into array form. For example, we execute the following code:
$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);
The output result is as follows:
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 ) ) ) ) ) )
As you can see, we have converted infinite category data into array form, and each category contains its sub-categories. Classification. In this way, we can easily use array functions to process infinite categorical data.
The above is the detailed content of How to convert infinite categorical data into array form in php. For more information, please follow other related articles on the PHP Chinese website!