2014-09-30 34 views
1

我有這樣的功能:如何將MySql Hierarchical數據傳遞給PHP中的數組?

function displayTree($parente, $level) { 
    $link = dbCLASS::dbConnect(); 
    $result = mysql_query("SELECT * FROM procediemntos_profissionais where PROCEDIEMNTOS_PROFISSIONAIS_PARENTE_ID = $parente "); 
    while ($row = mysql_fetch_array($result)) { 

     echo str_repeat('&nbsp', $level) . $row['PROCEDIEMNTOS_PROFISSIONAIS_NOME'] . "<br/>"; 

     self::displayTree($row['PROCEDIEMNTOS_PROFISSIONAIS_Pk'], $level + 1); 
    } 
} 

如果我想返回一個數組蒙山的所有元素,而不是打印它我怎麼能更改此代碼?

回答

0

我不確切知道你的數據庫類正在做什麼,但你沒有使用它,所以我只是使用我通常用來獲取數據的愚蠢的db類。此外,您的查詢方法(mysql_)已過時並已棄用。

<?php 
    class DBEngine 
     { 
      protected $con; 
      // Create a default database element 
      public function __construct($host = '',$db = '',$user = '',$pass = '') 
       { 
        try { 
          $this->con = new PDO("mysql:host=$host;dbname=$db",$user,$pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); 
         } 
        catch (Exception $e) { 
          return 0; 
         } 
       } 

      // Simple fetch and return method 
      public function Fetch($_sql) 
       { 
        $query = $this->con->prepare($_sql); 
        $query->execute(); 

        if($query->rowCount() > 0) { 
          while($array = $query->fetch(PDO::FETCH_ASSOC)) { 
            $rows[] = $array; 
           } 
         } 

        return (isset($rows) && $rows !== 0 && !empty($rows))? $rows: 0; 
       } 

      // Simple write to db method 
      public function Write($_sql) 
       { 
        $query = $this->con->prepare($_sql); 
        $query->execute(); 
       } 
     } 

    class MakeTree 
     { 
      public $_TreeArray; 

      public function display($parente = '', $level = '', $_makeArray = false) 
       { 
        if(!empty($parente)) { 
          // Create database connection 
          $con = new DBEngine('localhost','mydatabase','dbusename','dbpassword'); 
          // Fetch results from database 
          $result = $con->Fetch("SELECT * FROM procediemntos_profissionais where PROCEDIEMNTOS_PROFISSIONAIS_PARENTE_ID = '$parent'"); 
          // If not empty 
          if($result !== 0) { 
            foreach($result as $row) { 
              // Write if $_makeArray is false 
              if($_makeArray !== true) 
               echo str_repeat('&nbsp', $level) . $row['PROCEDIEMNTOS_PROFISSIONAIS_NOME'] . "<br/>"; 
              // Save to array 
              else 
               $this->_TreeArray[] = str_repeat('&nbsp', $level) . $row['PROCEDIEMNTOS_PROFISSIONAIS_NOME'] . "<br/>"; 

              if(isset($row['PROCEDIEMNTOS_PROFISSIONAIS_Pk'])) 
               $this->display($row['PROCEDIEMNTOS_PROFISSIONAIS_Pk'], $level + 1, $_makeArray); 
             } 

            // Return the array if isset 
            if(isset($this->_TreeArray)) 
             return $this->_TreeArray; 
           } 
         } 
       } 
     } 

    // Create instance 
    $tree = new MakeTree(); 
    // Set the value as true to start array 
    $array = $tree->display('value','level',true); 
    print_r($array); ?> 
0

這將是這樣的:

class myClass 
{ 
    public static function getTree($parente) 
    { 
     $out = array(); 
     $result = mysql_query("SELECT * FROM procediemntos_profissionais where PROCEDIEMNTOS_PROFISSIONAIS_PARENTE_ID = $parente "); 
     while ($row = mysql_fetch_array($result)) 
     { 
      $out[$row['PROCEDIEMNTOS_PROFISSIONAIS_NOME']] = self::getTree($row['PROCEDIEMNTOS_PROFISSIONAIS_Pk']); 
     } 
     return $out; 
    } 
} 

dbCLASS::dbConnect(); 
$tree = myClass::getTree(0); //or whatever the top level parent id is 

這將讓你一個數組,其中的關鍵是PROCEDIEMNTOS_PROFISSIONAIS_NOME,和值嵌套子陣列。在底層,您將獲得指向空數組的鍵。讓我知道如果你需要的陣列結構不同,我們可以弄清楚。

相關問題