FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Bara ett inlägg till!
|
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?
|
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Verkar som man får använda reset(), end(), next(), prev(), current() och key().
Måste du använda den interna pekaren? |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Bara ett inlägg till!
|
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.
|
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
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.
|
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Citat:
|
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
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]); } ![]() |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Bara ett inlägg till!
|
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. |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Bara ett inlägg till!
|
Magnus_A:
"loopa igenom en matris med start från valfri plats" (effektivt) är ju precis det jag vill göra. |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Mycket flitig postare
|
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. |
|||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Medlem
|
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... |
||
![]() |
![]() |
Svara |
|
|