Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  elu ei õpeta, PHP probleem märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
mark11
HV vaatleja

liitunud: 28.01.2006




sõnum 15.06.2008 14:27:22 elu ei õpeta, PHP probleem vasta tsitaadiga

olen selle probleemiga kaua jamanud, mitte just probleem aga sattusin asja taha millest jagu ei saa mitte kuidagi thumbs_up.gif


nimelt siis on klass

<?php
class tree_class {

   private $nodes;

   function __construct() {
      $this->nodes = array ();
   }

   function add($row_ID, $subRow_ID = 0, $row_name = "", $row_position = 0) {
      if (array_key_exists($row_ID, $this->nodes))
         return 0;
      $this->nodes[$row_ID] = array (
         "subRow_ID" => $subRow_ID,
         "row_name" => $row_name,
         "row_position" => $row_position
      );
      return 1;
   }

   function iterate() {
      foreach ($this->nodes as $rowID => $rowData) {
         if ($rowData['subRow_ID'] == 0) {
            // We have found one of the 'Root nodes'
            // Lets start printing all that node has
            echo "<b>".$rowData['row_name']."</b> <br>";
            unset($this->nodes[$rowID]);
            $this->print_f(0, 1,$rowID);
         }
      }
   }

   function print_f($node_ID, $node_LEVEL, $rowID) {
      foreach($this->nodes as $rowIDx => $rowData)  {
         if($rowData['subRow_ID'] == 0) continue;
         if($node_ID == 0) $node_ID = $rowID;
         if($rowData['subRow_ID'] == $node_ID) {
            echo str_repeat("-",$node_LEVEL)." ".$rowData['row_name']." <br>";
            unset($this->nodes[$rowIDx]);
            return $this->print_f($rowIDx, ++$node_LEVEL, $rowID);
         }
      }
      unset($this->nodes[$node_ID]);
      //return $this->print_f(0, 1, $rowID);
   }
}

$hi = new tree_class();
$hi->add(1, 0, "Links", 0);
$hi->add(2, 1, "My home", 0);
$hi->add(3, 2, "Pictures of home", 0);
$hi->add(4, 1, "Munad", 0);
$hi->iterate();
?>


mida ma sooviksin oleks see,et tekiks niiöelda ilus LOOP mis skännib kõik läbi ja displayb kõik ilusasti järjest..

tulemus peaks olema selline:

Links
- My home
-- Pictures of my home
- Munad

ning ühesõnaga lõpmatu menüü.. saaks moodustada selliseid asju:

Links
- My home
-Pictures of my home
-Something cool
-ultracool things
- Munad
Hacking
-Cracking
-Tutorials
- Hook
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
linnumees
HV kasutaja

liitunud: 15.06.2005




sõnum 15.06.2008 17:10:27 vasta tsitaadiga

Mis sa ikka jalgratast leiutad...

http://pear.php.net/package/Tree
http://pear.php.net/package/HTML_TreeMenu

Iseasi, milline on sääraste asjade jõudlus võrreldes mingi enda kirjutatud lihtsa asjaga. Aga keegi ei keela tulemusi või objekte cacheda. :p
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
m6mm
HV kasutaja

liitunud: 28.10.2003




sõnum 15.06.2008 17:43:44 vasta tsitaadiga

mark11, võiksid endale termini "rekursioon" selgeks teha.



   function iterate($s = 1, $subRowID = 0)
   {
      for($i = 1; $i < sizeof($this->nodes) + 1; $i++)
      {
         if($this->nodes[$i]['subRow_ID'] == $subRowID)
         {
            $output .= str_repeat('-', $s) .' ' . $this->nodes[$i]['row_name'] . '<br>';

            $output .= $this->iterate($s + 1, $i); // look for children only for this node

         }//if
         
      }//for i

   return $output;
   }//iterate

ning

echo $hi->iterate();



annab tulemuseks


- Links
-- My home
--- Pictures of home
-- Munad


lahenduse eest papp kanna siis pangaarvele icon_razz1.gif
Kommentaarid: 35 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  elu ei õpeta, PHP probleem
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.