Den forstår jeg ikke... Kan ikke se, hvor while løkken kommer ind, jeg arbejdet allerede ind i en while løkke, hvor $nr = $row["nr"]; - og så er det, jeg vil bruge nummeret (som er knyttet til afsnit, der vises efter hianden, så pil ned vil føre til næste afsnit vha. nr. - men da der ofte er spring i numrene, har jeg brug for keys).
Og uden while'n, dvs. $arr=Array($nr); $arr[]=$nr; print_r($arr); får jeg ikke meget mere/ bedre end oprindeligt: Array ( [0] => 1 [1] => 1 ), Array ( [0] => 2 [1] => 2 ) osv. med =>4,7 ---hvorfor lige (kun) [0] og [1]?
Nej, du vil printe udenfor løkken - men det er indenfor, jeg gerne vil bruge $arr[]! Og print_r($arr); udenfor løkken giver denne her: Array ( [0] => 6 )
Det er præcis som du siger! $arr=Array(); //skal uden for løkken while (....) { ... $arr[]=$nr; } print_r($arr); //også uden for løkken
Så giver det de rigtige resultater, men: Jeg skulle gerne bruge $arr[]=$nr; inden for løkken, og selv om jeg kan se fra print_r($arr), at det er det rigtige, som findes, hvordan så udnytte $arr[]=$nr; inden for løkken? $arr[]=$nr; selv giver ikke noget, og echo $arr[]; låser systemet. Jeg skal vel have fyldt noget - i eller $i - i []? Har prøvet i tågen om den her giver noget, men nej, tavshed: $num = count($nr); for ($i = 1; $i < $num; $i++) { echo $arr[$i]; } (og noget med "for" giver nyt gennemløb inden i while løkken, og det kan vel heller ikke være meningen?)
Jeg kan så bare ikke rigtig gøre noget ved sidste afsnits pil ned, som ikke bør være der - og løsningen forudsætter alle afsnits sorterings nr. er fortløbende (og begynder med 1).
Jeg kan heller ikke se hvad du skal gøre i din while-løkke, der læser fra tabellen, ud over at registrere ting i arrayet.
En foreach er go' hvis man skal gøre det samme ved hvert element, men det skal du ikke, da sidste og måske første gang skal være anderledes. Det klarer du nemmest med en for-løkke, hvor du kan teste på løbevariablen.
Men det kan jeg ikke (finde ud af?): Jeg er inden for en while løkke med $afsSortNr, så enhver for-løkke, fx med 4 gennemløb, giver 4 resultater for hvert gennemløb af $afsSortNr fra while-løkken (også selv om $afsSortNr=Array(); defineres før while). Nå, jeg opgiver...
Hvorfor dog. Du har ikke forklaret så godt hvad du vil, men mon det bare er at erstatte din foreach med en for. Inde i whileløkken skal du ikke lave mere end der er, sådan cirka i hvert fald.
Ok, her er, hvad jeg prøver nu: (jeg tror nok, det her angivne er korrekt, men svært at holde styr på alle ændringerne!)
$result1 = (select fra tb artikler) while ($row1 = mysql_fetch_array($result1)) { bruger variable fra artikler... A: $afsSortNr = array(); $result2 = (select fra tb afsnit where afsnit.artikelId = artikler.artikelId) while ($row2 = mysql_fetch_array($result2)) { bruger variable fra afsnit, bl.a. $afsSortNr HER: gøre noget ved $afsSortNr. så jeg får nr. på billeder som links/ pil-ned og pil-op til næste afsnit(s ankre) Vil ikke have pil ned ved sidste afsnit - der skal derimod være pil-op ved første afsnit. Noget af det, jeg har prøvet - med $afsSortNr som henholdsvis 1,2,3,4:
A. som vist her med array() uden for while: print_r($array) giver rigtig nok 1 ved 1. afsnit, 2 ved 2. afsnit, osv. Antyder nok, at det er rette vej, men hvordan få fat i keys og values? Og hvordan få en grænse på en $i til en for-løkke? $largest = max($afsSortNr); // giver ingenting $smallest = min($afsSortNr); // giver ingenting $count = count($afsSortNr); // giver 0 ud for alle 4 afsnit
Ideelt skulle $afsSortNr kunne springe i $value, og $key ikke nødvendigvis begynde med [0].
$array[] = $afsSortNr; skulle kunne give keys, men hvordan/ hvordan få fat i dem? Og selv, hvis jeg får noget à la: for ($i = 1; $i < $count; $i++) - hvordan så få fat i $value?
B. hvis array def. flyttes indenfor, fås Array ( [0] => 1 ), Array ( [0] => 2 )...=>3, =>4). Og stadig med array() indenfor: $largest = max($afsSortNr); // giver 1 ved 1. afsnit, 2. ved 2., 3. ved 3., 4 ved 4. afsnit (Brug af $largest giver break: for ($i = 1; $i < $largest; $i++) virker ikke, men den varierer jo også) $smallest = min($afsSortNr); // giver som $largest 1 ved 1. afsnit, 2. ved 2. osv. $count = count($afsSortNr); // giver 1, dvs. åbenbart 1 for hvert gennemløb af while, 4 gange ialt - echo $count giver '1' ud for hvert afsnit. Forstår ikke, hvorfor max() kan tælle op til 4 i 4. gennemløb, mens count() ikke kan tælle til mere end 1!? Men i alle tilfælde: Jeg kan heller ikke her få $count (eller $largest) til at begrænse en for-løkkes $i++
Som nævnt før har jeg en næsten-løsning à la B/ array() indenfor while: 1) mangler at få fjernet pilen nedad ud for sidste afsnit, når der ikke er en if-sætning inden i foreach: $array = array($afsSortNr); foreach ( $array as $key => $value ) { $valueNed = $value + 1; $ankerNed = $valueNed; //<a href='#$ankerNed'> echo "<a href='#$ankerNed'><img width='17' src='../graphics/pil-ned.png' border='0' alt='Til næste afsnit'></a>"; $valueOp = $value -1; $ankerOp = $valueOp; //<a href='#$ankerOp'> echo "<a href='#$ankerOp'><img width='17' src='../graphics/pil-op.png' border='0' alt='Til afsnittet før'></a>"; }
2) mangler at få den manuelt indsatte stopklods '4' erstattet med $var. $array = array($afsSortNr); foreach ( $array as $key => $value ) { $valueNed = $value + 1; $ankerNed = $valueNed; //<a href='#$ankerNed'> if ($ankerNed <= 4) // her skulle der være en $var i.s.f. '4' { echo "<a href='#$ankerNed'><img width='17' src='../graphics/pil-ned.png' border='0' alt='Til næste afsnit'></a>"; } $valueOp = $value -1; $ankerOp = $valueOp; //<a href='#$ankerOp'> echo "<a href='#$ankerOp'><img width='17' src='../graphics/pil-op.png' border='0' alt='Til afsnittet før'></a>"; } ................ bruger flere variable fra afsnit } bruger flere variable fra artikler } Så der er måske ingen løsning med denne grundopsætning?
Det ved jeg ikke, og det har jeg heller ikke lyst til at finde ud af.
Prop dine tingester ind i dit array, på den simplest tænkelige måde. Sorter dit array (hvis ikke allerede sorteret fra databasen) Brug en for ($i=0;$i<count($ditarray);$i++) Og find ud om det er sidste element med if ($i==count($ditarray)-1) { // sidste element
Jeg kan ikke nok til at proppe ind og tage ud af det array - jeg kan godt lave en $i..., men på hvad? Kan ikke få $value ud...
Har i mellemtiden lavet denne lille omvej, som tillæg under while'en: $result5 = mysql_query( "SELECT MAX(afsSortNr) AS maxNum, MIN(afsSortNr) AS minNum FROM afsnit WHERE $artikelId = '$artikelId' ");
så virker det med $maxNum i stedet for '4' ovenfor - jeg hiver en var for antallet ind, som jeg ikke kan (finde ud af at) fra den opr. while-løkke alene.
Men tak fordi du pressede mig lidt til at gå længere med arrays end jeg ellers havde tænkt mig - jeg har stadig ret meget at lære, men har lært noget undervejs! Det næste er at få $key og $value ud.
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.