webForumDet fria alternativet

Skappa dynamiska arrays i en class

7 svar · 236 visningar · startad av Ryzzen

RyzzenMedlem sedan mars 2000267 inlägg
#1

Har sutit och funderat lite på hur jag skall skappa en array som jag sen kan lägga till data i efterhand jag kommer på att det behövs. Alltså en dynamisk.

Förut gick det typ att göra så här:
$AccessArray[count($AccessArray)] = "Lite data";

Får det inte att funka när jag håller på med klasser. Tänkta att typ deta borde funka:
$this->AccessArray[count($this->AccessArray)] = "Lite data";

stycket ligger i en funktion i en klass. Så det är typ en global variabel för klassen.

SPiNMedlem sedan mars 20007 896 inlägg
#2

Använd array_push() och array_pop():

class MinKlass {
     private $minArray;

     function add( $värde ) {
          array_push( $this->minArray, $värde );
     }

     function pop() {
          return array_pop( $this->minArray );
     }
}

$instans = new MinKlass();
$instans->add( "där." );
$instans->add( "Hej " );
echo $instans->pop();
echo $instans->pop();
// Borde resultera i output:en Hej där.

Vill du inte poppa en array ( Alltså ta ut sista värdet först ) kan du använda array_shift() för att få ut det första värdet först. Notera dock att båda dessa funktioner tar bort det returnerade värdet från arrayen.

RyzzenMedlem sedan mars 2000267 inlägg
#3

OK

Men du vet inte hur jag kan få innehållet kvar?

Grejen är en att jag gör en databas sökning och skappar en array av resultat. Resultat behöver jag ibland kontroller flera gåner på samma sida. Så då tänkte jag om jag skappar en array med allt innehåll. Då slipper jag belasta databaserven varje gång.

SPiNMedlem sedan mars 20007 896 inlägg
#4

Men du vet inte hur jag kan få innehållet kvar?

Då får du använda dig av en vanlig array och skriva egna add() och pop() funktioner.

class MinKlass {
     private $minArray;
     private $minKontroll;

     function MinKlass() {
          $this->minKontroll = 0;
     }

     function add( $värde ) {
          $this->minArray[] = $värde;
          $this->minKontroll++;
     }

     function pop( $värde ) {
          return $this->minArray[ --$this->minKontroll ];
     }

     function get( $index ) {
          if( isset( $this->minArray[ $index ] ) )
               return $this->minArray[ $index ];
          else
               return false;
     }
}

Jag lade också till en funktion för att du ska kunna hämta värden från arrayen via ett angivet index, dvs. funktionen get().

SPiNMedlem sedan mars 20007 896 inlägg
#5

Notera att nyckelordet private endast finns iom PHP 4.3! Har du en lägre version av PHP får du använda nyckelordet var istället, men då är variablerna inte privata.

RyzzenMedlem sedan mars 2000267 inlägg
#6

Tackar för ditt svar..skall kolla på det i morgon..Har totalt tröttnat på PHP för i dag...

Och jag som tyckte att jag var så duktig som gjorde om mina gammla funktioner till ett klass system i stället :(

SPiNMedlem sedan mars 20007 896 inlägg
#7

Varför fungerade inte det då? Det borde ju gå galant. :)

RyzzenMedlem sedan mars 2000267 inlägg
#8

JAAAA det funkar..

Fast jag byggde om det lite..
Skippade dina funktioner. Den gammla koden var:
$this->AccessArray[count($this->AccessArray)] = $Data['grpName'];

Skrev i stället bara:
$this->AccessArray[] = $Data['grpName'];

Och det funkade!!!!

146 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)