Avatar billede jokum78 Nybegynder
06. november 2005 - 20:32 Der er 22 kommentarer

bladre i array

Kan ikke få det til at spille, at bladre i et array.

Jeg kører en while hvor jeg genererer mit array:
while($rAllPictures = $q->fetchRow()) {
    $arrImg[] = $rAllPictures["image_id"];
}

Så har jeg et array alá:
Array ( [0] => 27 [1] => 28 [2] => 29 [3] => 30 [4] => 31 [5] => 32 [6] => 33 [7] => 34 [8] => 35 [9] => 36 [10] => 37 [11] => 38 )

Jeg skal så lave nogle next og prev links hvor man skal kunne bladre mellem disse id'er.

Hvordan hulen gør jeg? Så den også ændrer pointeren hver gang, så next og prev ikke vil være de samme hele tiden.
Avatar billede jakobdo Ekspert
06. november 2005 - 20:39 #1
Jeg tror måske du kan bruge ideen fra denne side: http://www.codebreaker.dk/exp/660071.php
Avatar billede jokum78 Nybegynder
06. november 2005 - 20:41 #2
ahh ikke helt, for mit problem er brugen af array funktionerne...
Avatar billede jakobdo Ekspert
06. november 2005 - 20:45 #3
array funktionerner?
Avatar billede jakobdo Ekspert
06. november 2005 - 20:47 #4
Du har array funktioner som NEXT() PREV() CURRENT() RESET og END()
Avatar billede jokum78 Nybegynder
06. november 2005 - 20:57 #5
Det er jeg klar over.
Avatar billede jakobdo Ekspert
06. november 2005 - 21:00 #6
Hvad er det så du mener?
Avatar billede jokum78 Nybegynder
06. november 2005 - 21:02 #7
Hvordan jeg bruger dem i praksis!

Har forsøgt med:

while($rAllPictures = $q->fetchRow()) {
    $arrImg[] = $rAllPictures["image_id"];
}

$next = next($arrImg);

<a href="foo.php?id=".$next."">next</a>

Men det vil resultere i at $next har samme værdi hver gang. Hvordan ændrer jeg pointeren for hver gang................?
Avatar billede jakobdo Ekspert
06. november 2005 - 21:13 #8
Hvad med noget i denne stil:

$offset = $_GET["offset"];

while($rAllPictures = $q->fetchRow())
{
    $arrImg[] = $rAllPictures["image_id"];
}

$antal = count($arrImg);
echo "<img src=\"".$arrImg[$offset]."\" />

if($antal > $offset)
{
    $next = $offset + 1;
    <a href="foo.php?offset=".$next."">Next</a>
}

if($offset > 0)
{
    $prev = $offset - 1;
    <a href="foo.php?offset=".$prev."">Prev</a>
}
Avatar billede jokum78 Nybegynder
06. november 2005 - 21:14 #9
Tak for forslaget, sådan plejer jeg også at gøre...men kan jeg ik bruge next og prev funktionerne og bruge den interne pointer?
Avatar billede jakobdo Ekspert
06. november 2005 - 21:17 #10
Du kan ikke holde styr på det fra gang til gang nej!
Med mindre du kan sætte pointeren udfra offset, og det synes jeg faktisk ikke lige at kunne finde en funktion som gør.
Avatar billede jokum78 Nybegynder
06. november 2005 - 21:22 #11
Okay...problemet er nemlig at jeg åbner en popup med en get værdi med en start offset parameter.

Denne værdi er fx 342, den kunne have entry 4 i mit array. 4 => 342.

4 skal så være start offset, så man kan bladre tilbage eller frem, hvis man fx starter midt inde i arrayet.

342 kan ikke bruges som pointer derfor...hvordan gør jeg det? Skulle forsat gerne bruge 342 som get værdi og ikke entry'et i arrayet.
Avatar billede jokum78 Nybegynder
06. november 2005 - 21:28 #12
Altså som det eksempel på array jeg pastede:
Array ( [0] => 27 [1] => 28 [2] => 29 [3] => 30 [4] => 31 [5] => 32 [6] => 33 [7] => 34 [8] => 35 [9] => 36 [10] => 37 [11] => 38 )

Er værdierne get pointeren, altså 27, 28, 29, ikke 0, 1, 2.

Sådan skal det fortsat blive ved med at være...
Avatar billede hmortensen Nybegynder
06. november 2005 - 21:34 #13
En metode til at få fat i key ud fra en given værdi:
function current_key($value, $array)
{
    while ($p = current($array))
    {
        if ($p == $value)
            return key($array);
    }
    next($array);
    return -1;
}
Avatar billede jakobdo Ekspert
06. november 2005 - 21:36 #14
Så tror jeg måske du skal bruge: key()
key(342) skulle gerne give dig index 4.
Avatar billede hmortensen Nybegynder
06. november 2005 - 21:38 #15
jakobdo, sådan fungerer key() ikke.
Den returnere blot indexet på den aktuelle post.
Avatar billede jakobdo Ekspert
06. november 2005 - 21:42 #16
hmortensen: Findes der virkelig ikke nogen array-funktion som kan returnere index på en værdi?
Avatar billede hmortensen Nybegynder
06. november 2005 - 21:43 #17
Jeg har lige løbet listen igennem uden held, derfor ovenstående.

Jeg kan heller ikke komme i tanke om at jeg har haft brug for det ;)
Avatar billede showsource Seniormester
07. november 2005 - 01:58 #18
array_search() kan bruges.

function get_id($nr, $var="", $vararray) {

$key = array_search($nr, $vararray);

    if(empty($var)) { // forrige index
    return @$vararray[$key-1];
    }else{ // næste index
    return @$vararray[$key+1];
    }

}

Så kan du få den key du skal bruge + / -
Avatar billede showsource Seniormester
07. november 2005 - 02:07 #19
ehmm, som ex.

<?php

function get_id($my_array, $to_find, $var="") {

    if(is_array($my_array)) {

    $key = array_search($to_find, $my_array);

        if(empty($var)) {
        return @$my_array[$key-1];
        }else{
      return @$my_array[$key+1];
        }

    }else{

    return false;

    }

}

$ar = array(41,12,3,47,62,68,9);

foreach($ar as $var) {
echo"<a href=\"". $_SERVER["PHP_SELF"] ."?vis=". $var ."\">Link til ". $var ."</a><br>\n";
}

echo"<p>\n";

if(isset($_GET["vis"])) {
echo"forrige: ". get_id($ar, $_GET["vis"]) ."<br>\n";
echo"næste: ". get_id($ar, $_GET["vis"], 1);
}else{
echo"næste: ". get_id($ar, $ar[0], 1);
}

?>
Avatar billede showsource Seniormester
07. november 2005 - 02:15 #20
hmm, her er lige en mere jeg havde liggende

<?php

$ar = array(10,22,35,41,600,87,95);

function get_id($myarray, $nr, $var="") {
global $idarray;
$key = array_search($nr, $myarray);
    if(empty($var)) {
    return @$myarray[$key-1];
    }else{
    return @$myarray[$key+1];
    }
}

$start = current($ar);

$first = "<a href=\"". $_SERVER["PHP_SELF"] ."?id=". $start ."\">Start</a>";

if(isset($_GET["id"])) {

    if(in_array($_GET["id"], $ar)) {

        if(true == get_id($ar, $_GET["id"])) {
        echo"<a href=\"". $_SERVER["PHP_SELF"] ."?id=". get_id($ar, $_GET["id"]) ."\">forrige</a>";
        echo" &nbsp; &nbsp; ";
        }

        if(true == get_id($ar, $_GET["id"], 1)) {
        echo"<a href=\"". $_SERVER["PHP_SELF"] ."?id=". get_id($ar, $_GET["id"], 1) ."\">Næste</a>";
        }


    }else{
    echo $first;
    }

}else{
echo $first;
}

echo"<p>". implode(", ", $ar);

?>
Avatar billede showsource Seniormester
07. november 2005 - 02:16 #21
global $idarray;
er ikke noget.
Avatar billede showsource Seniormester
07. november 2005 - 02:20 #22
sorry for spam, men nok så'n her så:

<?php

$ar = array(10,22,35,41,600,87,95);

function get_id($myarray, $nr, $var="") {

$key = array_search($nr, $myarray);
    if(empty($var)) {
    return @$myarray[$key-1];
    }else{
    return @$myarray[$key+1];
    }
}

$first = "<a href=\"". $_SERVER["PHP_SELF"] ."?id=". $ar[0] ."\">Start</a>";

if(isset($_GET["id"])) {

    if(in_array($_GET["id"], $ar)) {

        if(true == ($forrige = get_id($ar, $_GET["id"]))) {
        echo"<a href=\"". $_SERVER["PHP_SELF"] ."?id=". $forrige ."\">forrige</a>";
        echo" &nbsp; &nbsp; ";
        }

        if(true == ($next = get_id($ar, $_GET["id"], 1))) {
        echo"<a href=\"". $_SERVER["PHP_SELF"] ."?id=". $next ."\">Næste</a>";
        }


    }else{
    echo $first;
    }

}else{
echo $first;
}

echo"<p>". implode(", ", $ar);

?>
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester