이 글은 주로 PHP에서 참조 구현 트리를 생성하는 방법을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.
시간과 메모리를 낭비하는 인피니투스 분류의 재귀 순회를 아직도 사용하고 계신가요? 이 글을 읽고 나면 바꿔야겠다는 생각이 듭니다.
OSChina에서 본 매우 간결한 PHP Infinitus 분류 스패닝 트리 방식입니다. 우연히 인용해서 공유해봤습니다.
코드는 다음과 같습니다.
function generateTree($items){ $tree = array(); foreach($items as $item){ if(isset($items[$item['pid']])){ $items[$item['pid']]['son'][] = &$items[$item['id']]; }else{ $tree[] = &$items[$item['id']]; } } return $tree; } $items = array( 1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'), 2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'), 3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'), 4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'), 5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'), ); print_r(generateTree($items));
아래에서 인쇄된 결과를 볼 수 있습니다.
코드는 다음과 같습니다.
Array ( [0] => Array ( [id] => 1 [pid] => 0 [name] => 安徽省 [son] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [name] => 合肥市 [son] => Array ( [0] => Array ( [id] => 4 [pid] => 3 [name] => 长丰县 ) ) ) [1] => Array ( [id] => 5 [pid] => 1 [name] => 安庆市 ) ) ) [1] => Array ( [id] => 2 [pid] => 0 [name] => 浙江省 ) )
위 스패닝 트리 방법도 5줄로 단순화할 수 있습니다.
코드는 다음과 같습니다.
function generateTree($items){ foreach($items as $item) $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']]; return isset($items[0]['son']) ? $items[0]['son'] : array(); }
위의 무한 분류 데이터 트리 구조화 방법은 배울 가치가 있습니다. 하지만 이 코드의 실제 용도는 명확하지 않다고 생각합니다. 형식화된 트리 데이터를 꺼내려면 여전히 재귀를 수행해야 합니다.
코드는 다음과 같습니다.
/** * 如何取数据格式化的树形数据 */ $tree = generateTree($items); function getTreeData($tree){ foreach($tree as $t){ echo $t['name'].'<br>'; if(isset($t['son'])){ getTreeData($t['son']); } } } getTreeData($tree);
요약: 위 내용은 전체입니다. 이 글의 내용이 모든 분들의 공부에 도움이 되기를 바랍니다.
관련 권장 사항:
PHP를 사용하여 데이터베이스를 작동하여 테이블이 존재하는지 확인하는 방법
위 내용은 PHP의 참조 구현 트리 생성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!