Avatar billede flatov Nybegynder
18. august 2005 - 19:39 Der er 26 kommentarer og
1 løsning

Få DB udtræk lavet til array

Jeg skal have nogle info i min database skrevet ud som et array

fx 'navn' i tabelen 'personer' skal blive til

$array = ("navn1", "navn2", "navn3", "osv");

alt efter hvor mange rækker der ligger i tabelen
Avatar billede Slettet bruger
18. august 2005 - 20:42 #1
Prøv med:

<?php
require("sql.php"); // connect

function getArray() {
    $a = array();
    $query = mysql_query("select id, navn from personer order by id desc") or die(mysql_error());
    while ($foo = mysql_fetch_assoc($query)) {
        $a[] = $foo[navn];
    }
    return "\"".implode("\", \"", $a)."\"";
}

$array = (getArray());
?>
Avatar billede nielle Nybegynder
18. august 2005 - 20:53 #2
Der er ingen grund til at udtrække id, hvis man ikke skal bruge det til noget alligevel:

<?php
function getArray()
{
    $a = array();
    $query = mysql_query("select navn from personer order by id desc") or die(mysql_error());
    while ($foo = mysql_fetch_assoc($query))
    {
        $a[] = $foo["navn"];
    }
    return $a;
}

$navneArray = getArray();
?>
Avatar billede flatov Nybegynder
18. august 2005 - 21:15 #3
Hedder arrayet så $navneArray ?
Avatar billede Slettet bruger
18. august 2005 - 21:20 #4
Kommer an på hvem du spørger.
Avatar billede nielle Nybegynder
18. august 2005 - 21:21 #5
getArray() returnere arrayet og du kan lægge det i hvilken variabel du ønsker.
Avatar billede flatov Nybegynder
18. august 2005 - 21:22 #6
Tænkte nok mest på nielles, i hvert fald det der virker til det andet jeg skulle sætte det sammen med :D

Men glem det lille spørgsmål :D
Avatar billede Slettet bruger
18. august 2005 - 21:26 #7
De er jo ens, nogle få (mere eller mindre overflødige) rettelser og ændret navn. Dog gør det koden mere overskuelig ;)
Avatar billede nielle Nybegynder
18. august 2005 - 21:27 #8
Jeg tog nu bare gandso's oplæg og bearbejdede det lidt ... så ingen point til mig for denne her. :^)
Avatar billede flatov Nybegynder
18. august 2005 - 21:28 #9
Valgte det, da det så mest overskueligt ud. Men gandso, tror du, du kan hjælpe mig med noget andet, evt for flere point ?!
Avatar billede flatov Nybegynder
18. august 2005 - 21:29 #10
<?php
function getArray()
{
    include("mysql.php");
    $a = array();
    $query = mysql_query("select team from ano_ic_division where division = '1' order by team desc") or die(mysql_error());
    while ($foo = mysql_fetch_assoc($query))
    {
        $a[] = $foo["team"];
    }
    return $a;
}

$navneArray = getArray();


    function rearrange(&$hold){
       
        $temp = array();
       
        array_push($temp, $hold[0]);
        array_push($temp, $hold[count($hold)-1]);

        for($j = 1; $j < count($hold)-1; ++$j){   
            array_push($temp, $hold[$j]);       
        }
        $hold = $temp;
    }

   
    $antal_gange = 1;           

    $hold = getArray();
   
    for($h = 0; $h < $antal_gange; ++$h){

        for($j = 0; $j < (count($hold)-1); ++$j){
   
            for($i = 0; $i < (count($hold)/2); ++$i){
                echo "Runde $j " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
            }
            rearrange($hold);
            echo "<br>----------<br>";
        }
        $hold = array_reverse($hold);
    }

?>

Den laver 3 runder, men problemet er den starter med Runde 0, kan du hjælpe mig med at få den ændret til Runde 1, osv. ?
Avatar billede nielle Nybegynder
18. august 2005 - 21:30 #11
Grunden til at jeg ændrede "$array" er at jeg har en modvilje mod at man bruge navne som er identiske med PHP-kommandoer. Og siden der jo er noget som hedder array() ... så måtte den dø!
Avatar billede flatov Nybegynder
18. august 2005 - 21:30 #12
Det er helt fint nielle :D
Avatar billede nielle Nybegynder
18. august 2005 - 23:12 #13
Er det ikke bare at rette:

for($i = 0; $i < (count($hold)/2); ++$i){
    echo "Runde $j " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
}

- til:

for($i = 0; $i < (count($hold)/2); ++$i){
    echo "Runde " . $j+1 . " " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
}
Avatar billede flatov Nybegynder
19. august 2005 - 07:38 #14
Umiddelbart virker det ik. Den skriver bare 1 - Den udelader Runde og skriver 1 ved alle runder
Avatar billede nielle Nybegynder
19. august 2005 - 15:18 #15
Umiddelart er den eneste forskel, min kode-ændring skulle gøre, at der står det samme som før, bortset fra at tallet lige efter "Runde" nu skulle være 1 større.
Avatar billede flatov Nybegynder
19. august 2005 - 17:21 #16
Altså, jeg overskrev det som du skrev med det gamle og så kom der det ud af det som jeg skrev.

Nu er jeg ikke hjemme pt, men jeg skal da gerne eftertjekke det når jeg kommer hjem !
Avatar billede nielle Nybegynder
26. august 2005 - 09:41 #17
Har du fået det til at virke?
Avatar billede flatov Nybegynder
26. august 2005 - 09:48 #18
Ikke lige det sidste, men det jeg faktisk spurgte har jeg, så du kan bare lige smide et svar...
Avatar billede nielle Nybegynder
26. august 2005 - 10:14 #19
Hvis du har problemer med at få det sidste på plads, så skal du da bare spørge her.

... men i mellemtiden får du et svar :^)
Avatar billede flatov Nybegynder
26. august 2005 - 17:35 #20
Sådan så er svaret accpeteret, men har stadig problemer med det sidste, da den bare skriver 1 ved alle runder + den sletter der hvor der står runder...
Avatar billede nielle Nybegynder
26. august 2005 - 18:43 #21
Hvordan ser din kode ud nu?
Avatar billede flatov Nybegynder
26. august 2005 - 20:35 #22
<?php
function getArray()
{
    include("mysql.php");
    $a = array();
    $query = mysql_query("select team from ano_ic_division where division = '1' order by team desc") or die(mysql_error());
    while ($foo = mysql_fetch_assoc($query))
    {
        $a[] = $foo["team"];
    }
    return $a;
}

$navneArray = getArray();


    function rearrange(&$hold){
       
        $temp = array();
       
        array_push($temp, $hold[0]);
        array_push($temp, $hold[count($hold)-1]);

        for($j = 1; $j < count($hold)-1; ++$j){   
            array_push($temp, $hold[$j]);       
        }
        $hold = $temp;
    }

   
    $antal_gange = 1;           

    $hold = getArray();
   
    for($h = 0; $h < $antal_gange; ++$h){

        for($j = 0; $j < (count($hold)-1); ++$j){
   
      for($i = 0; $i < (count($hold)/2); ++$i){
              echo "Runde " . $j . " " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
      }
            rearrange($hold);
            echo "<br>----------<br>";
        }
        $hold = array_reverse($hold);
    }

?>
Avatar billede nielle Nybegynder
26. august 2005 - 20:48 #23
.. og hvad bliver der udskrevet på din side?
Avatar billede flatov Nybegynder
26. august 2005 - 23:41 #24
Problemet ligger i, at når den udskriver runderne, så starter den med Runde 0

sådan:

Runde 0

Hold 1 vs. Hold 2
Hold 3 vs. Hold 4

Runde 1

Hold 1 vs. Hold 3
Hold 2 vs. Hold 4

Runde 2

Hold 1 vs. Hold 4
Hold 2 vs. Hold 3

Og den skulle meget gerne starte med Runde 1 istedet for Runde 0
Avatar billede nielle Nybegynder
27. august 2005 - 06:31 #25
Så burde dette kunne gøre det:

echo "Runde " . $j+1 . " " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
Avatar billede flatov Nybegynder
27. august 2005 - 12:09 #26
Jeg har brugt det du har skrevet og det ser nu sådan ud:

1

Hold 1 vs. Hold 2
Hold 3 vs. Hold 4

1

Hold 1 vs. Hold 3
Hold 2 vs. Hold 4

1

Hold 1 vs. Hold 4
Hold 2 vs. Hold 3

Den skriver slet ikke Runde og den skriver 1 alle steder.
Avatar billede nielle Nybegynder
27. august 2005 - 21:35 #27
Prøv med parentes rundt om:

echo "Runde " . ($j+1) . " " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
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