Home  >  Article  >  Backend Development  >  How to convert infinite categorical data into array form in php

How to convert infinite categorical data into array form in php

PHPz
PHPzOriginal
2023-04-18 15:20:21501browse

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.

  1. Define infinite categorical data format

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:

  • id: unique identifier, usually an auto-increment ID.
  • name: Category name.
  • pid: Upper-level classification ID, 0 if it is the first-level classification.
  • level: Classification level, 1 if it is the first level classification.

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],
]
  1. Define the transformation function

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.

  1. Perform conversion

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn