Kom ihåg mig?
Home Menu

Menu


Loopar med php

Ämnesverktyg Visningsalternativ
Oläst 2007-09-26, 13:19 #1
Starwebs avatar
Starweb Starweb är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2004
Inlägg: 332
Starweb Starweb är inte uppkopplad
Flitig postare
Starwebs avatar
 
Reg.datum: Jan 2004
Inlägg: 332
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.
Starweb är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-26, 13:50 #2
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
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 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-26, 13:57 #3
koalas avatar
koala koala är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Sep 2004
Inlägg: 1 154
koala koala är inte uppkopplad
Har WN som tidsfördriv
koalas avatar
 
Reg.datum: Sep 2004
Inlägg: 1 154
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å...
koala är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-26, 14:33 #4
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
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
Nåväl, nu måste jag till skolan!
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-26, 14:43 #5
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
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
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-26, 17:04 #6
Starwebs avatar
Starweb Starweb är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2004
Inlägg: 332
Starweb Starweb är inte uppkopplad
Flitig postare
Starwebs avatar
 
Reg.datum: Jan 2004
Inlägg: 332
Citat:
Originally posted by fors@Sep 26 2007, 13:33
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
Nåväl, nu måste jag till skolan!
Wow! Är djupt imponerad, den fungerade klockrent och dessutom med flera nivåer, dvs även om man stoppade in 2 eller 4 arrays så visslade den bara ut informationen korrekt.

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
Starweb är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-27, 08:55 #7
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Citat:
Originally posted by Starweb@Sep 26 2007, 16:04
Wow! Är djupt imponerad, den fungerade klockrent och dessutom med flera nivåer, dvs även om man stoppade in 2 eller 4 arrays så visslade den bara ut informationen korrekt.

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
Det är ingen fara. Det är bara roligt att lösa sådana problem.
fors ä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 07:25.

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