FAQ |
Kalender |
2007-09-26, 13:19 | #1 | |||
|
||||
Flitig postare
|
Sitter med ett problem som kanske är rätt enkelt men känner bara att min hjärna är på STREJK och inte verkar inte vilja klura ut svaret... =(
Behöver lite php-hjälp! Jag har en array, med lite olika värden som ser ut såhär: $aaList = array(); $aaList[0][0] = 88; $aaList[0][1] = 77; $aaList[0][2] = 66; $aaList[1][0] = 99; $aaList[1][1] = 111; $aaList[2][0] = 11; $aaList[2][1] = 10; $aaList[2][2] = 14; $aaList[2][3] = 12; Utskriven med print_r($aaList); ser den alltså ut såhär: Array ( [0] => Array ( [0] => 88 [1] => 77 [2] => 66 ) [1] => Array ( [0] => 99 [1] => 111 ) [2] => Array ( [0] => 11 [1] => 10 [2] => 14 [3] => 12 ) ) Steg #1: Det jag vill göra är att ta det FÖRSTA elementet i den FÖRSTA array sedan det FÖRSTA elementet i den ANDRA array sen det FÖRSTA elementet i den TREDJE arrayn. Steg #2: Det jag vill göra är att ta det FÖRSTA elementet i den FÖRSTA array sedan det FÖRSTA elementet i den ANDRA array sen det ANDRA elementet i den TREDJE arrayn. Steg #3: Det jag vill göra är att ta det FÖRSTA elementet i den FÖRSTA array sedan det FÖRSTA elementet i den ANDRA array sen det TREDJE elementet i den TREDJE arrayn. Steg #4: Det jag vill göra är att ta det FÖRSTA elementet i den FÖRSTA array sedan det FÖRSTA elementet i den ANDRA array sen det FJÄRDE elementet i den TREDJE arrayn. Steg #5: Det jag vill göra är att ta det FÖRSTA elementet i den FÖRSTA array sedan det ANDRA elementet i den ANDRA array sen det FÖRSTA elementet i den TREDJE arrayn. Steg #6: Det jag vill göra är att ta det FÖRSTA elementet i den FÖRSTA array sedan det ANDRA elementet i den ANDRA array sen det ANDRA elementet i den TREDJE arrayn. osv osv tills samtliga element är genomgånga, men de ska ha den följden som ovan. Om man skulle verkligen SKRIVA ut exakt vad jag vill åstadkomma utan att använda loopar eller "dynamik" så blir det såhär: ?><pre><? echo $aaList[0][0]." "; echo $aaList[1][0]." "; echo $aaList[2][0]." "; echo $aaList[0][0]." "; echo $aaList[1][0]." "; echo $aaList[2][1]." "; echo $aaList[0][0]." "; echo $aaList[1][0]." "; echo $aaList[2][2]." "; echo $aaList[0][0]." "; echo $aaList[1][0]." "; echo $aaList[2][3]." "; echo $aaList[0][0]." "; echo $aaList[1][1]." "; echo $aaList[2][0]." "; echo $aaList[0][0]." "; echo $aaList[1][1]." "; echo $aaList[2][1]." "; echo $aaList[0][0]." "; echo $aaList[1][1]." "; echo $aaList[2][2]." "; echo $aaList[0][0]." "; echo $aaList[1][1]." "; echo $aaList[2][3]." "; echo $aaList[0][1]." "; echo $aaList[1][0]." "; echo $aaList[2][0]." "; echo $aaList[0][1]." "; echo $aaList[1][0]." "; echo $aaList[2][1]." "; echo $aaList[0][1]." "; echo $aaList[1][0]." "; echo $aaList[2][2]." "; echo $aaList[0][1]." "; echo $aaList[1][0]." "; echo $aaList[2][3]." "; echo $aaList[0][1]." "; echo $aaList[1][1]." "; echo $aaList[2][0]." "; echo $aaList[0][1]." "; echo $aaList[1][1]." "; echo $aaList[2][1]." "; echo $aaList[0][1]." "; echo $aaList[1][1]." "; echo $aaList[2][2]." "; echo $aaList[0][1]." "; echo $aaList[1][1]." "; echo $aaList[2][3]." "; echo $aaList[0][2]." "; echo $aaList[1][0]." "; echo $aaList[2][0]." "; echo $aaList[0][2]." "; echo $aaList[1][0]." "; echo $aaList[2][1]." "; echo $aaList[0][2]." "; echo $aaList[1][0]." "; echo $aaList[2][2]." "; echo $aaList[0][2]." "; echo $aaList[1][0]." "; echo $aaList[2][3]." "; echo $aaList[0][2]." "; echo $aaList[1][1]." "; echo $aaList[2][0]." "; echo $aaList[0][2]." "; echo $aaList[1][1]." "; echo $aaList[2][1]." "; echo $aaList[0][2]." "; echo $aaList[1][1]." "; echo $aaList[2][2]." "; echo $aaList[0][2]." "; echo $aaList[1][1]." "; echo $aaList[2][3]." "; ?></pre><? Svar nedan är gissningar från andra som också verkar ha samma feltänk som jag Svar #1: for ($iRow=0;$iRow < count($aaList);$iRow++) { for($iColumn=0;$iColumn < count($aaList[$iRow]);$iColumn++) { echo $aaList[$iRow][$iColumn]." "; } } } Svar #2: $iRow=0; for($iColumn=0;$iColumn < count($aaList[$iRow]);$iColumn++) { while ($iRow < count($aaList)) { echo $aaList[$iRow][$iColumn]." "; $iRow++; } $iRow=0; } => Svar #2 kommer närmare än svar #1, men fortfarande en bra bit kvar. Har du "rätt tänk" så hjälp gärna oss lägre stående varelser, för min hjärna verkar inte greppa denna loopen. |
|||
Svara med citat |
2007-09-26, 13:50 | #2 | ||
|
|||
Supermoderator
|
Intressant problem. Förklara gärna vad du tänkt göra, för jag rör till det för mig själv när jag försöker loopa så. Jag misstänker att det finns en enklare lösning på ditt problem.
Förklara vad det hela går ut på och varifrån indata kommer.
__________________
Jonny Zetterström se.linkedin.com/in/jonnyz | bjz.se | sajthotellet.com | kalsongkungen.se | zretail.se | zetterstromnetworks.se | webbhotellsguide.se | ekonominyheter24.se | nyamobiltelefoner.se | gapskratt.se | antivirusguiden.se | jonny.nu |
||
Svara med citat |
2007-09-26, 13:57 | #3 | |||
|
||||
Har WN som tidsfördriv
|
Om du inte har något mönster som indexeringen ska följa så är nog inte en loop rätt väg att gå...
|
|||
Svara med citat |
2007-09-26, 14:33 | #4 | ||
|
|||
Medlem
|
Jag skrev ihop en funktion för det lite snabbt. Designen är kanske inte den snyggaste, men såvitt jag förstår så fungerar den i alla fall.
Statiska värden (kopierat från ditt inlägg): http://aspire.niklasfors.com/test2.php http://aspire.niklasfors.com/test2.phps Min funktion: http://aspire.niklasfors.com/test.php http://aspire.niklasfors.com/test.phps Jag fick åtminstone samma resultat på dessa sidor när jag körde diff-kommandot av resultatet nyss. Kod:
~$ wget http://aspire.niklasfors.com/test.php ~$ wget http://aspire.niklasfors.com/test2.php ~$ diff -s test.php test2.php Filerna test.php och test2.php är lika |
||
Svara med citat |
2007-09-26, 14:43 | #5 | |||
|
||||
Flitig postare
|
Fixade ihop en lite snabbt jag med, som jag förstår så ska den "klättra" uppåt en nivå hela tiden när den nått toppen på en understående array.
Mitt sätt kanske inte är det bästa, men fungerar om jag förstått det hela rätt. Kod:
$aaList = array(); $aaList[0][0] = 88; $aaList[0][1] = 77; $aaList[0][2] = 66; $aaList[1][0] = 99; $aaList[1][1] = 111; $aaList[2][0] = 11; $aaList[2][1] = 10; $aaList[2][2] = 14; $aaList[2][3] = 12; print loop($aaList); function loop($a, $level = '000') { $str = ''; for($i = 0; $i < count($a); $i++) { if(@!$a[$i][$level{$i}]) return ''; $str .= $a[$i][$level{$i}]."<br>"; } $new_low_level = ($level{2} >= (count($a[count($a)-1])-1) ? 0 : $level{2}+1); $new_med_level = ($level{2} >= (count($a[count($a)-1])-1) ? ($level{1} >= (count($a[count($a)-2])-1) ? '0' : $level{1}+1) : $level{1}); $new_top_level = ($level{2} >= (count($a[count($a)-1])-1) && $level{1} >= (count($a[count($a)-2])-1)) ? $level{0}+1 : $level{0}; $new_level = $new_top_level.$new_med_level.$new_low_level; $str .= '<br><br>'.loop($a, $new_level); return $str; } edit: Såg nu att jag inte var först, men våra resultat ser lika ut, så det är nog bara att välja |
|||
Svara med citat |
2007-09-26, 17:04 | #6 | |||
|
||||
Flitig postare
|
Citat:
orreborre din funktion fungerade också bra, och löste uppgiften precis som den skulle, men hade behövts modifieras om den skulle klara fler eller färre arrays. Jag bugar och tackar för alla utomordentliga förslag! Uppgiften är löst. Får nog återkomma med fler kluriga problem i framtiden, här verkar gömma sig några skarpa hjärnor |
|||
Svara med citat |
2007-09-27, 08:55 | #7 | ||
|
|||
Medlem
|
Citat:
|
||
Svara med citat |
Svara |
|
|