Этот класс преобразует массив плоских категорий в массив структурированных деревьев:
<code><?php
/**
* Creates a structured tree out of a flat category list
*/
class CategoryTree {
/**
*
* @var array
*/
protected $categories = array();
/**
*
* @var array
*/
protected $tree = array();
/**
* Default constructor
* @param array $categories
*/
function __construct(array $categories) {
$this->categories = $categories;
}
/**
* Process a subtree
* @param array $categories
* @param integer $parentId
* @return array
*/
protected function getSubtree(array $categories, $parentId = 0) {
$tree = array();
foreach($categories as $category) {
if($category['suboff'] == $parentId) {
$tree[$category['id']] = $category;
$tree[$category['id']]['children'] = $this->getSubtree($categories, $category['id']);
}
}
return $tree;
}
/**
* Get the category tree as structured array
* @return array
*/
public function getTree() {
if(empty($this->tree)) {
$this->tree = $this->getSubtree($this->categories, 0);
}
return $this->tree;
}
/**
* Get the category tree as string representation
* @return string
*/
public function __toString() {
return "<pre>" . print_r($this->getTree(), true) . "
";
}
}
// Теперь используем класс с данными givven:
$ Categories = массив (
массив (
'id' => 1,
'category' => 'software',
'suboff' => 0
),
массив (
'id' => 2,
«категория» => «программирование»,
'suboff' => 1
),
массив (
'id' => 3,
'category' => 'Тестирование',
'suboff' => 1
),
массив (
'id' => 4,
'category' => 'Проектирование',
'suboff' => 1
),
массив (
'id' => 5,
'category' => 'Больница',
'suboff' => 0
),
массив (
'id' => 6,
'category' => 'Доктор',
'suboff' => 5
),
массив (
'id' => 7,
'category' => 'Медсестры',
'suboff' => 5
),
массив (
'id' => 9,
'category' => 'Teaching',
'suboff' => 0
),
массив (
'id' => 10,
'category' => 'PHP программирование',
'suboff' => 2
),
массив (
'id' => 11,
'category' => '.net Программирование',
'suboff' => 2
)
);
$ myTree = new CategoryTree ($ category);
echo $ myTree;
?>