>  기사  >  백엔드 개발  >  PHP는 재귀를 사용하여 계층적으로 데이터를 찾습니다(자세한 코드 설명).

PHP는 재귀를 사용하여 계층적으로 데이터를 찾습니다(자세한 코드 설명).

藏色散人
藏色散人앞으로
2020-01-28 14:59:152886검색

PHP는 재귀를 사용하여 계층적으로 데이터를 찾습니다(자세한 코드 설명).

오늘은 레벨별로 데이터를 찾는 재귀 활용법을 주로 소개하겠습니다.

원리는 매우 간단합니다. 주로 상위 ID를 통해 하위 레벨을 찾는 것입니다. PHP 루프 코드를 사용하여 구현하는 것도 쉽습니다. PHP 중복 코드는 재귀를 사용하여 이 기능을 구현할 수 있습니다.

1 먼저 배열을 구성하는 데 사용할 데이터를 찾습니다. (데이터베이스를 재귀적으로 쿼리하지 말고 이 배열을 기반으로 필요한 데이터를 구성하세요.)

For 예를 들어, 다음 데이터를 가져옵니다:

$data = [
    ['id' => '1', 'pid' => '0', 'dsp' => '1'],
    ['id' => '2', 'pid' => '0', 'dsp' => '2'],
    ['id' => '3', 'pid' => '0', 'dsp' => '3'],
    ['id' => '4', 'pid' => '1', 'dsp' => '1-4'],
    ['id' => '5', 'pid' => '4', 'dsp' => '1-4-5'],
    ['id' => '6', 'pid' => '5', 'dsp' => '1-4-5-6'],
    ['id' => '7', 'pid' => '3', 'dsp' => '3-7'],
    ['id' => '8', 'pid' => '2', 'dsp' => '2-8'],
    ['id' => '9', 'pid' => '1', 'dsp' => '1-9'],
    ['id' => '10', 'pid' => '4', 'dsp' => '1-4-10'],
];

2. 다음으로 데이터가 계층적으로 표시되도록 재귀를 사용하여 데이터를 재구성합니다.

/**
 * 根据父级id查找子级数据
 * @param $data     要查询的数据
 * @param int $pid 父级id
 */
public function recursion($data, $pid = 0)
{
    static $child = [];   // 定义存储子级数据数组
    foreach ($data as $key => $value) {
        if ($value['pid'] == $pid) {
            $child[] = $value;   // 满足条件的数据添加进child数组
            unset($data[$key]);  // 使用过后可以销毁
            $this->recursion($data, $value['id']);   // 递归调用,查找当前数据的子级
        }
    }
    return $child;
}

결과 얻기:

[
  {
    "id": "1",
    "pid": "0",
    "dsp": "1"
  },
  {
    "id": "4",
    "pid": "1",
    "dsp": "1-4"
  },
  {
    "id": "5",
    "pid": "4",
    "dsp": "1-4-5"
  },
  {
    "id": "6",
    "pid": "5",
    "dsp": "1-4-5-6"
  },
  {
    "id": "10",
    "pid": "4",
    "dsp": "1-4-10"
  },
  {
    "id": "9",
    "pid": "1",
    "dsp": "1-9"
  },
  {
    "id": "2",
    "pid": "0",
    "dsp": "2"
  },
  {
    "id": "8",
    "pid": "2",
    "dsp": "2-8"
  },
  {
    "id": "3",
    "pid": "0",
    "dsp": "3"
  },
  {
    "id": "7",
    "pid": "3",
    "dsp": "3-7"
  }
]

3. 다음 방법을 사용하여 더욱 레이어드된 모습을 표시할 수도 있습니다.

/**
 * 根据父级id查找子级数据
 * @param $data     要查询的数据
 * @param int $pid 父级id
 */
public function recursion($data, $pid = 0)
{
    $child = [];   // 定义存储子级数据数组
    foreach ($data as $key => $value) {
        if ($value['pid'] == $pid) {
            unset($data[$key]);  // 使用过后可以销毁
            $value['child'] = $this->recursion($data, $value['id']);   // 递归调用,查找当前数据的子级
            $child[] = $value;   // 把子级数据添加进数组
        }
    }
    return $child;
}

결과 얻기:

[
  {
    "id": "1",
    "pid": "0",
    "dsp": "1",
    "child": [
      {
        "id": "4",
        "pid": "1",
        "dsp": "1-4",
        "child": [
          {
            "id": "5",
            "pid": "4",
            "dsp": "1-4-5",
            "child": [
              {
                "id": "6",
                "pid": "5",
                "dsp": "1-4-5-6",
                "child": []
              }
            ]
          },
          {
            "id": "10",
            "pid": "4",
            "dsp": "1-4-10",
            "child": []
          }
        ]
      },
      {
        "id": "9",
        "pid": "1",
        "dsp": "1-9",
        "child": []
      }
    ]
  },
  {
    "id": "2",
    "pid": "0",
    "dsp": "2",
    "child": [
      {
        "id": "8",
        "pid": "2",
        "dsp": "2-8",
        "child": []
      }
    ]
  },
  {
    "id": "3",
    "pid": "0",
    "dsp": "3",
    "child": [
      {
        "id": "7",
        "pid": "3",
        "dsp": "3-7",
        "child": []
      }
    ]
  }
]

더 많은 관련 PHP 지식을 보려면 php 튜토리얼을 방문하세요!

위 내용은 PHP는 재귀를 사용하여 계층적으로 데이터를 찾습니다(자세한 코드 설명).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제