1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| <?php
class Category {
var $id;
var $name;
var $_subcategories;
function Category($id, $name) {
$this->id = $id;
$this->name = $name;
$this->subcategories = array();
}
function addSubcategory(&$o) {
$this->subcategories[] =& $o;
}
function toHtml() {
$output = '<div>'. $this->name .'</div>';
if (count($this->subcategories) > 0) {
$output .= '<ul>';
reset($this->subcategories);
while (list($key,) = each($this->subcategories)) {
$output .= '<li>';
$output .= $this->subcategories[$key]->toHtml();
$output .= '</li>';
}
$output .= '</ul>';
}
return $output;
}
}
$row = array(
array(
'id' => 3,
'id_parent' => 4,
'name' => 'cat 3'
),
array(
'id' => 4,
'id_parent' => 9,
'name' => 'cat 4'
),
array(
'id' => 9,
'id_parent' => 0,
'name' => 'cat 9'
),
array(
'id' => 12,
'id_parent' => 9,
'name' => 'cat 12'
)
);
$categories = array();
//On remplit
foreach($row as $cat) {
$categories[$cat['id']] =& new Category($cat['id'], $cat['name']);
}
$racines = array();
//On lie les sous categories aux parents
foreach($row as $cat) {
if (isset($categories[$cat['id_parent']])) {
$categories[$cat['id_parent']]->addSubcategory($categories[$cat['id']]);
} else {
$racines[] =& $categories[$cat['id']];
}
}
reset($racines);
while(list($key,) = each($racines)) {
echo $racines[$key]->toHtml();
}
?> |
Partager