22. februar 2005 - 10:16Der er
23 kommentarer og 1 løsning
Hjælp til at gøre array-udtræk "mere" dynamisk
Jeg skal lige have lidt hjælp til at gøre et array-udtræk mere dynamisk. Jeg har følgende kode til at finde data i et mulitdimensionelt array.
for ($i=1;$i<=sizeof($KOSTPRIS1); $i++) { for ($j=1;$j<=15; $j++) $KOSTPRIS1[$i][$j] = str_replace(',','.',$KOSTPRIS1[$i][$j]); echo "kost1[".$i."] = new Array('".$KOSTPRIS1[$i][1]."','".$KOSTPRIS1[$i][2]."','".$KOSTPRIS1[$i][3]."','".$KOSTPRIS1[$i][4]."','".$KOSTPRIS1[$i][5]."','".$KOSTPRIS1[$i][6]."','".$KOSTPRIS1[$i][7]."','".$KOSTPRIS1[$i][8]."','".$KOSTPRIS1[$i][9]."','".$KOSTPRIS1[$i][10]."','".$KOSTPRIS1[$i][11]."','".$KOSTPRIS1[$i][12]."','".$KOSTPRIS1[$i][13]."','".$KOSTPRIS1[$i][14]."','".$KOSTPRIS1[$i][15]."','".$KOSTPRIS1[$i][16]."','".$KOSTPRIS1[$i][17]."','".$KOSTPRIS1[$i][18]."');\n"; }
Det vil sige, at jeg i stedet for $j=<15 gerne skulle have en størrelse på arrayet, hvilket jeg regnede med kunne gøres f.eks. sådanne $j=<sizeof($KOSTPRIS1[$i]) men når jeg sætter det ind, får jeg slet ikke noget smidt ud til browseren, så noget tyder på at den aldrig bliver færdig. Derudover skal jeg have kodet echo'en sådan, at den automatisk skriver alle array-felter ud, og ikke stopper ved f.eks. 15, når der ud måske kunne være 20 værdier i arrayet.
Derudover er der så 4 kostprisarrays, som ikke ser nogenlunde lige sådan ud, pointen er at de alle kan ændres af brugerne af systemet, og derfor skal jeg have den til at løbe dynamisk i gennem både det "øverste" array og det "inderste" array.
Nej, det er fordi der længere nede i koden bliver refereret til arrayetpladsen kost1[1][15], og for ikke at skulle lave for meget om, vil jeg gerne have outputtet til at være f.eks. kost1[1][1] = værdi1, kost2[1][2] = værdi2 osv. osv.
Så det vil altså sige, at den anden parameter i kost1 arrayet, skal tælles op alt efter hvor mange der ud er.
Forestil dig en stor tabel. De forskellige rækker er i dette tilfælde $key. De forskellige kolonner eller mere specifikt celler, skal jeg så have talt op, så jeg kan få den værdi som anden parameter i kost1[][]. På eventuelt at se nedenstående tegning
Okay, i den første celle står der f.eks. 12,02. Den kaldes senere ved at sige var x=kost1[1][1]. [1][1] fordi det er den første række og den første kolonne. Derfor vil jeg gerne have at værdien, som jeg fidner bliver lagt over i f.eks. arrayet kost1[1][1], hvor den sidste [] står for kolonnenummeret.
Vi kan også prøve at gå tilbage til udgangspunktet.
for ($i=1;$i<=sizeof($KOSTPRIS1); $i++) {
Løber arrayet $KOSTPRIS1 igennem, altså tæller hvor mange nye arrays der er, dem sammenlignede jeg tidligere med rækker.
for ($j=1;$j<=15; $j++)
Løber så det enkelte array igennem 15 gange, tidligere sammenlignet med kolonner, men hvad nu hvis der kommer flere, så kommer de ikke med i resultatet. Derfor vil jeg gerne have at den også her løber dynamisk igennem det enkelte array.
Omformer "," til ".", ikke så vigtig i dette spørgsmål, men skal med.
echo "kost1[".$i."] = new Array('".$KOSTPRIS1[$i][1]."','".$KOSTPRIS1[$i][2]."','".$KOSTPRIS1[$i][3]."','".$KOSTPRIS1[$i][4]."','".$KOSTPRIS1[$i][5]."','".$KOSTPRIS1[$i][6]."','".$KOSTPRIS1[$i][7]."','".$KOSTPRIS1[$i][8]."','".$KOSTPRIS1[$i][9]."','".$KOSTPRIS1[$i][10]."','".$KOSTPRIS1[$i][11]."','".$KOSTPRIS1[$i][12]."','".$KOSTPRIS1[$i][13]."','".$KOSTPRIS1[$i][14]."','".$KOSTPRIS1[$i][15]."','".$KOSTPRIS1[$i][16]."','".$KOSTPRIS1[$i][17]."','".$KOSTPRIS1[$i][18]."');\n"; }
Skriver så værdierne ud i én lang køre, og jeg kan så efterfølgende ved at skrive f.eks. kost1[1][2] få værdien som ligger i række 1 og kolonne 2, for at blive i tabel-termologien
Ja både og, det kommer ud som jeg vil have det, men det endelige slut resultat er ikke rigtigt, og jeg har ikke ændret på nogle udregninger og de har virket korrekt tidligere i dag, så jeg tror at der et eller andet sted bliver cyklet noget forkert igennem.
array_walk og array_map udfører en funktion på alle elementer i et array. De er næsten ens, men ved array_walk får du index'et med (skulle bruges til at lave "kost1[$index]".
Den inderste - array_map - bruger jeg bare til at lave replace (, til .) funktionen på alle elementerne.
Kan skrive det samme med nogle løkker...men det bliver så rodet efter min mening :-)
Okay, jeg synes altid det er rat at vide, hvad ens, i dette tilfælde din ;-), kode gør.
Tak for hjælpen og så til din sukos.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.