Kom ihåg mig?
Home Menu

Menu


Sätta array-pekare i PHP

 
Ämnesverktyg Visningsalternativ
Oläst 2008-03-24, 12:45 #1
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Jag har en mycket stor array i PHP som jag delvis vill travarsera genom. För att kunna göra det effektivt behöver jag sätta array:ens interna pekaren till ett visst element som jag har nyckeln till. Är det möjligt?
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 13:59 #2
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Verkar som man får använda reset(), end(), next(), prev(), current() och key().
Måste du använda den interna pekaren?
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 15:21 #3
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Det låter som att du inte tänkt igenom det tillräckligt. Förklara gärna om du faktiskt har en lösning. Givetvis kan jag scanna igenom arrayen från början tills jag hittar elementet med rätt nyckel, men poängen med hela den här tråden var att jag inte vet om/hur man kan göra det effektivt.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 20:29 #4
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Lånar lite om det ursäktas och undrar om det finns ett bra sätt att loopa igenom en matris med start från valfri plats och loopa igenom hela matrisen, inte bara det som är kvar av den.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 20:34 #5
elofssons avatar
elofsson elofsson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 881
elofsson elofsson är inte uppkopplad
Mycket flitig postare
elofssons avatar
 
Reg.datum: Jul 2004
Inlägg: 881
Citat:
Originally posted by Magnus_A@Mar 24 2008, 21:29
Lånar lite om det ursäktas och undrar om det finns ett bra sätt att loopa igenom en matris med start från valfri plats och loopa igenom hela matrisen, inte bara det som är kvar av den.
Fungerar det inte att köra två loopar? Först sista halvan som återstår och sedan efter det i loop nummer två första halvan?
elofsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 21:07 #6
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
kullervo: Det verkar ju inte som om det finns något sätt att flytta den interna pekaren med php-funktioner utöver de jag nämnde tidigare.

Jag antar att nycklarna i din array är något annat än rena index, annars vore det ju en smal sak att loopa från valfri startposition. Vet inte var arrayen "kommer ifrån", men en idé kanske kan vara att använda dubbla arrayer så att

$originalArray[$key] = $value

översätts till

$newArray1[$key] = $index
$newArray2[$index] = $value

där $index är stigande heltal. Vill du loopa igenom arrayen med start vid elementet med nyckeln $key blir det ju något i stil med

Kod:
$elementCount = count($newArray2);
for ($i = $newArray1[$key]; $i < $elementCount; $i++) {
  doSomething($newArray2[$i]);
}
Om detta överhuvudtaget lönar sig jämfört med att loopa sig igenom arrayen med next() etc. beror ju lite på hur du skapar arrayen från början. Det är ju självklart ingen vits att loopa igenom hela arrayen bara för att skapa den heltalsindexerade arrayen...
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 22:41 #7
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
etanders:
Visst är alla sätt som löser problemet, hur hackiga dom än är, av intresse men det jag letar efter i första hand är lösningen för det generella problemet. PHP kan göra det här internt men det verkar vara omöjligt att göra det med PHP-kod.

En annan variant av din lösning är att låta arrayen vara en länkad lista, dvs. där varje element också innehåller nyckeln till näst följande element. Det är en enkare och vanligare lösning och således förmodligen ett bättre val.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 22:42 #8
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Magnus_A:
"loopa igenom en matris med start från valfri plats" (effektivt) är ju precis det jag vill göra.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 23:06 #9
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
Reg.datum: Oct 2004
Inlägg: 751
array_slice kanske kan fungera? Dvs. plocka ut den delen av arrayen som är intressant och därmed få ditt startelement först i arrayen och sedan loopa igenom.

http://se2.php.net/manual/en/function.array-slice.php

Man ska dock komma ihåg att en array i PHP inte är någon array egentligen utan en hastabell om man tittar på PHPs interna representation av hur arrayen lagras.
jimmie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-24, 23:50 #10
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
För en något generellare lösning hade jag nog valt att skriva en klass med sådana egenskaper att den uppfyllde de specifikationer jag hade, eftersom php uppenbarligen inte har någon inbyggd funktion för just detta.

Det finns ju ett antal "standard-datastrukturer" att utgå ifrån. Länkad lista är en, kanske skulle en dubbellänkad lista vara att föredra beroende på hur generellt det ska vara. Problemet med länkad lista är ju att det inte går att gå direkt till ett element mitt i listan utan att stega igenom alla föregående element och det var väl ungefär detta du ville undvika, så jag skulle inte valt en ren länkad lista...
etanders är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 05:23.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017