Avatar billede droa Novice
16. maj 2009 - 16:06 Der er 4 kommentarer og
1 løsning

Spørgsmål mht let tabel udskrivning

Hej eksperter, jeg har lavet mig et lille script til og kunne lave en liste med Underkategorier, jeg vil bare høre kritikere, om der var en lettere og måske mere brugbar måde end den jeg har lavet?


<pre>
<?php
$t[0]["Root"] = "Rod 1";
$t[1]["0"] = "Tomat";
$t[2]["0"] = "Augurk";
$t[3]["Root"] = "Rod 2";
$t[4]["3"] = "Æble";
$t[5]["4"] = "Marieæble";
$t[6]["3"] = "Banan";
$t[7]["Root"] = "Rod 3";
$t[8]["4"] = "Jasminæble";
$t[9]["5"] = "Danske";
$t[10]["1"] = "Cherry Tomat";
$t[11]["10"] = "Danske";
$t[12]["11"] = "Fyn";
$t[13]["12"] = "Odense";
$t[14]["7"] = "Odense";
$t[15]["14"] = "5240";
$t[16]["14"] = "5000";

function maincat($t)
{
for($i = 0;$i <= count($t);$i++)
    {
        if(isset($t[$i]["Root"]))
        {
            echo "<b>[".$t[$i]["Root"]."]</b>\n";
            subcat($t,$i,0);
        }
    }
}

function subcat($t,$SubCatId,$ilevel)
{
$ilevel++;
$WhiteSpace = "";
for($i=1;$i<=$ilevel;$i++)
{
$WhiteSpace .= "  ";
}
for($i = 0;$i <= count($t);$i++)
    {
        if(isset($t[$i][$SubCatId]))
        {
            echo $WhiteSpace."[$i] => ".$t[$i][$SubCatId]." (l: $ilevel)\n";
            subcat($t,$i,$ilevel);
        }
    }
}

maincat($t);

?>
</pre>


koden er så utroligt rodet, men altså var bare råkode, som jeg hurigt lavede, ønsker lidt og få et indblik i hvordan det ville være mere pænt og se på?

200 point til et godt eksempel :)
Avatar billede Slettet bruger
16. maj 2009 - 20:03 #1
Prøv med klasser. Her er lidt "pseudokode" (læs: Jeg har ikke tjekket, om det virker - fordi jeg er et dovent svin):

class Entity
{
  public static $Entities = array(); // Static array til at indeholde samtlige entities - for at holde styr på skidtet
  public static function AddEntity($id, $parent, $value)
  {
    $Entities[] = new Entity($id, $parent, $value);
    return $Entities; // Af potentielt praktiske årsager
  }

  public $Id;
  public $Parent;
  public $Value;
  // Tilføj evt. flere egenskaber her
  function __contruct($id, $parent, $value)
  {
    $Id = $id;
    $Parent = $parent;
    $Value = $value;
  }
  // Her er et eksempel på en praktisk funktion:
  public function GetChildren()
  {
    $children = array();
    foreach ($Entities as &$entity)
    {
      if (entity->$Parent == $Id)
        $children[] = $entity;
    }
    unset($entity);
    return children;
  }
}

function ent($id, $parent, $value)
{
  return new Entity($id, $parent, $value);
}

Entity::AddEntity("1", false, "Rod 1");
Entity::AddEntity("1.1", "1", "Underemne 1");
Entity::AddEntity("1.2", "1", "Underemne 2");
Entity::AddEntity("1.2.1", "1.2", "Underunderemne 1");
Entity::AddEntity("2", false, "Rod 3");
Entity::AddEntity("2.1", "2", "Underemne 3");
Entity::AddEntity("2.2", "2", "Underemne 4");
Entity::AddEntity("2.2.1", "2.2", "Underunderemne 2");
Entity::AddEntity("2.2.1.1", "2.2.1", "Underunderunderemne");

Er det anvendeligt? Jeg har med stor succes brugt det på f.eks. www.ovrkll.com til at holde styr på undersiderne.
Avatar billede Slettet bruger
16. maj 2009 - 20:05 #2
For pokker, nu glemte jeg jo at skrive selve udprintningsfunktionen :) Lige et sekund!
Avatar billede Slettet bruger
16. maj 2009 - 20:21 #3
// Som tilføjelse til klassen Entity

public static GetEntity($id) // Denne funktion letter arbejdet
{
  foreach ($Entities as &$entity)
  {
    if ($entity->$Id == $id)
      return $entity;
  }
  unset($entity);
  return;
}

public static PrintHierarchy($entity, $level) // her er den egentlige funktion til at udskrive hierarkiet
{
  $p = "- "; // Disse to variable optager plads og burde i praksis placeres uden for funktionen
  $w = "  ";

  $s = "";
  for ($i = 0; $i < $level; $i++)
    $s .= $w;
  $return = $s.$p.$entity->$Id.": ".$entity->$Value."<br>";
  $level++;
  $children = $entity->GetChildren();
  foreach ($children as &$child)
    $return .= PrintHierarchy($child, $level);
  unset($child);
  return $return;
}

// Bemærk at der således SKAL anvendes et enkelt overelement (altså en overordnet rod)
// Her udskrives Rod 1's (fra tidligere) hierarki
// PS: Følgende er i modsætning til det tidligere kode placeret uden for klassen Entity

echo Entity::PrintHierarchy(Entity::GetEntity("1"), 0);


Hmm... Det lykkedes mig rent faktisk at forvirre mig selv der, men er du stadig med? :)
Avatar billede droa Novice
16. maj 2009 - 20:42 #4
det gav mig lige et meget bedre overblik, havde tænkt lidt på og lave en klasse, da de er så meget lettere og holde styr på det hele sådan,  dog kan jeg ikke helt bruge den konstruktion, men har give mig en idé til hvordan jeg vil have den, mange tak for eksemplet, ligger du lige et svar?
Avatar billede Slettet bruger
16. maj 2009 - 20:46 #5
Giggity :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester