Versione che ritorna un array di array.
Codice PHP:
<?php
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'tests');
define('DB_USER', 'root');
define('DB_PWD' , '');$bdd = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
function hierarchie($padre,$bdd)
{
$array = array();
$maxDepth = 15;
$array2 = array();
_hierarchie($padre,$bdd,$array,1,$maxDepth,$array2);
return $array;
}
function _hierarchie($padre,$bdd,&$array,$level,$maxDepth,$array2,&$maxL=0)
{
if ($level <= $maxDepth)
{
$array2[$level] = $padre;
$query = "select padre, figlio from tabella1 where padre=$padre order by padre, figlio";
$prepared = $bdd->prepare($query);
$prepared->execute();
while ($row = $prepared->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT))
{
$level2 = $level+1;
$maxL = $level2;
_hierarchie($row[1],$bdd,$array,$level2,$maxDepth,$array2,$maxL);
}
if ($level >= $maxL)
{
$arrayRes = array();
foreach($array2 as $key => $value)
{
$arrayRes[] = $value;
}
$array[] = $arrayRes;
}
}
}
$padre = 1;
$array = hierarchie($padre,$bdd);
foreach($array as $key => $subarray) {
print "$key => ";
foreach($subarray as $value) {
print $value." ";
}
print "<br/>";
}
I dati
|
padre |
figlio |
|
1 |
2 |
|
1 |
3 |
|
1 |
4 |
|
2 |
21 |
|
2 |
22 |
|
2 |
23 |
|
3 |
31 |
|
3 |
32 |
|
4 |
41 |
|
21 |
220 |
|
21 |
221 |
|
23 |
230 |
|
23 |
231 |
|
32 |
320 |
|
32 |
322 |
|
32 |
323 |
|
231 |
2310 |
Il risultato.
0 => 1 2 21 220
1 => 1 2 21 221
2 => 1 2 22
3 => 1 2 23 230
4 => 1 2 23 231 2310
5 => 1 3 31
6 => 1 3 32 320
7 => 1 3 32 322
8 => 1 3 32 323
9 => 1 4 41