Avatar billede trasher Nybegynder
01. oktober 2001 - 15:19 Der er 4 kommentarer og
1 løsning

Kædet objekter

Jeg har et problem med Objecter, jeg kan ikke gemmenløbe et kædet array. Lad mig illustrer.

class a {
  var $nummer;
  var $next;  // Dette peger på det næste element i listen.
  function a ($nr,$next) {
    $this->next = $next;
    $this->nummer = $nr;
  }
  function get_next() { return $this->next; }
  function get_nummer() { return $this->nummer; }
  function set_nummer($nr) ( $nummer = $nr; }
}

// Det var classen :-)

for($i=0;$i < 10;$i++)// Data hældes i classen
  $list = new a($i,$list);

// Her er så problemet.
$list_1 = &$list;
$list_2 = &$list;
while ($list_2) {
  while ($list_1) {
    if ($list_2->get_nummer() < $list_1)
      echo \"Er minder\";
    $list_1 = $list_1->get_next();
  }
  $list_2 = $list_2->get_next();
}

while($list)
  echo \"|\".$list->get_nummer().\"<br>\"

Det hele funger, men når jeg køre den sidste løgge der gennemløber alle elementer igen er der ingen i listen.
Dette virker i C++ men ikke her da alle ponter flytter sig, ligeså snart man flytter en, og det var jeg ikke meningen, jeg skulle jo gerne holde ved i den første del af listen, så jeg kan gennemløbe den sener.

/Trasher
Avatar billede alvion Nybegynder
01. oktober 2001 - 16:14 #1
Du skal bruge referencer, men jeg er ikke heeeelt sikker på, at du kan lave det du vil. Referencer er nemlig IKKE pointere.

Anyway du kan prøve at læse lidt om referencer her:

http://download.php.net/manual/en/language.references.php

Hvis du stadig har problemer efter det, så sig til. Så kigger jeg lidt mere i det. (Det gør jeg nu alligevel allerede, fordi endelig kommer der et spændende spørgsmål. :-)

Må jeg forresten spørge, hvad du skal bruge det til?
Avatar billede alvion Nybegynder
01. oktober 2001 - 16:23 #2
Hvad med den her:


<?php
class a {
  var $nummer;
  var $next;  // Dette peger på det næste element i listen.

  function a ($nr, $next) {
    $this->next = $next;
    $this->nummer = $nr;
  }
}

// Indsæt en \"jordforbindelse\" i sidste element i kæden
$list = \"\";

for($i=0;$i < 3;$i++)// Data hældes i classen
  $list = new a($i,&$list);

var_dump($list);

$l = &$list;
while ($l !== \"\") {
    echo \"#\".$l->nummer .\"#\";
    $l = $list->next;
}
?>
Avatar billede trasher Nybegynder
02. oktober 2001 - 02:06 #3
Jeg kan bruge dette til at sorter flere dimutinale arrays med. Det er meget fleksibelet, men jeg syntes bare ikke det med pointer virker.
Jeg læser lige lidt på det link du sendte og prøver dit program-stump af. Vender tilbage i løbet af dagen.

/Trasher
Avatar billede trasher Nybegynder
02. oktober 2001 - 11:27 #4
Jeg har checket din kode og jeg kan ikke bruge den. Den laver det samme som min egen kode gør. Prøv at lave en \'Echo $list;\' i slutningen af din kode, og du vil få intet ud af det. Det jeg skulle have her SKAL være begyndelsen af min liste af objekter og ikke slutningen.

Men tak for dit link, jeg har læst det der var om det, og det virker ikke som pointer i C++, så man kan ikke \"holde\" på det første element i en kædetliste.
Hvis man flytter bare et af de variable der peger ind på listen flyttes alle.
Hvis man forsøger at lave en kopi af første variable kopires hele listen, og det er jo ikke meningen, for så arbejder jeg på to ens lister.

Det jeg tror jeg skal er sikkeret at lave en double-kædet liste, men så bliver det sikkeret for tungt for compileren at arbejde med.

Du får de 60 point for at have givet mig linket, og for at have forsøgt.
Avatar billede alvion Nybegynder
02. oktober 2001 - 11:46 #5
Prøv evt. at læse noget mere omkring PHP\'s forskellige sort funktioner. Der er en af dem, der kan bruges til multidimensionelle arrays.
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