Advertisement
Guest User

HierList function

a guest
Nov 25th, 2010
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.27 KB | None | 0 0
  1. <?php
  2.  
  3. function InsertAfter($array, $pos, $value) {
  4.     $returnarray = array();
  5.     $mod = 0;
  6.     for($i = 0; $i < count($array); $i++) {
  7.         $returnarray[$i+$mod] = $array[$i];
  8.         if($i == $pos) {
  9.             $mod = 1;
  10.             $returnarray[$i+$mod] = $value;
  11.         }  
  12.     }
  13.     return $returnarray;
  14. }
  15.  
  16. function HierList($dataArray, $idKeyName = "id", $parentKeyName = "parent") {
  17.     $returnArray = array();
  18.     $j = 0;
  19.     foreach ($dataArray as $dataKey => $dataValue) {
  20.         if ($dataValue[$parentKeyName] == 0 || !$dataValue[$parentKeyName]) {
  21.             $returnArray[$j] = $dataValue;
  22.             unset($dataArray[$dataKey]);
  23.             $j++;
  24.         }
  25.     }
  26.    
  27.     foreach ($dataArray as $dataKey => $dataValue) {
  28.         for ($i = 0; $i < count($returnArray); $i++) {
  29.             if ($dataValue[$parentKeyName] == $returnArray[$i][$idKeyName]) {
  30.                 $pos = $i;
  31.                 break;
  32.             } else {
  33.                 $pos = -1;
  34.             }
  35.         }
  36.         if($pos != -1) {
  37.             $dataValue['depth'] = $returnArray[$pos]['depth'] + 1;
  38.             $returnArray[$pos]['children'] += 1;
  39.             $returnArray = InsertAfter($returnArray, $pos, $dataValue);
  40.             unset($dataArray[$dataKey]);           
  41.         } else {
  42.             $returnArray[] = $dataValue;
  43.         }
  44.     }
  45.    
  46.     $tempReturnArray = array();
  47.     foreach($returnArray as $value) {
  48.         $tempReturnArray[$value[$idKeyName]] = $value;
  49.     }
  50.    
  51.     return $tempReturnArray;
  52. }
  53.  
  54.  
  55. $testArray = array(
  56.     0 => array(
  57.         'id'        => 1,
  58.         'name'      => 'test #1',
  59.         'parentid'  => 0
  60.     ),
  61.     1 => array(
  62.         'id'        => 2,
  63.         'name'      => 'test #2',
  64.         'parentid'  => 1
  65.     ),
  66.     2 => array(
  67.         'id'        => 3,
  68.         'name'      => 'test #3',
  69.         'parentid'  => 1
  70.     ),
  71.     3 => array(
  72.         'id'        => 4,
  73.         'name'      => 'test #4',
  74.         'parentid'  => 2
  75.     ),
  76.     4 => array(
  77.         'id'        => 5,
  78.         'name'      => 'test #5',
  79.         'parentid'  => 4
  80.     ),
  81.     5 => array(
  82.         'id'        => 6,
  83.         'name'      => 'test #6',
  84.         'parentid'  => 99
  85.     ),
  86.     6 => array(
  87.         'id'        => 7,
  88.         'name'      => 'test #7',
  89.         'parentid'  => 76
  90.     ),
  91.     7 => array(
  92.         'id'        => 8,
  93.         'name'      => 'test #8',
  94.         'parentid'  => 6
  95.     )
  96. );
  97.  
  98. print "<pre>".print_r(HierList($testArray, 'id', 'parentid'), 1)."</pre>";
  99. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement