Avatar billede cypherbeast Nybegynder
22. januar 2008 - 23:25 Der er 17 kommentarer

Udtræk fra MySQL til Multi Array

Hej

jeg sidder med et problem som jeg bare ikke kan få løst.

Jeg laver et udtræk fra en database med en funktion.
Funktioner skal så returnerer denne værdi i et array så jeg kan bruge det på siden hvor funktionen er kaldt.

Jeg kan godt få det til at virke med en simpel array som indeholder navne, men jeg vil gerne udtrække både navn og id, og jeg kan ikke få det til at fungere med et multiarray.

måske er der en meget nemmere måde end at bruge arrays, håber i kan hjælpe mig.
Avatar billede nielle Nybegynder
23. januar 2008 - 08:56 #1
Hvad mener du præcist med et multi array i denne sammenhæng? Hvordan vil du gerene have at udtrækket skal se ud?

Og prøv gerne at vise noget af den kode som du ikke kan få til at fungere.
Avatar billede cypherbeast Nybegynder
23. januar 2008 - 09:49 #2
Der er ikke så meget kode da jeg slet ikkek na dreje hvordan den skal hænge sammen.

Jeg laver et alm udtræk fra en database som henter [navn] og [id]. Dem vil jeg gerne bruge på forskellige sider og derfor bliver det hele gjort i en funktion.

Jeg vil gerne have de to oplysninger ind i et array (måske ikke multi, jeg har ikke helt styr på det), funktionen skal så returnere det array så jeg kan bruge oplysninger på siden hvor funktionen er kaldt.
Avatar billede showsource Seniormester
23. januar 2008 - 10:43 #3
Du sætter key til navn i dit array

$names = array();

hent fra db

while()
$names[id-fra-db] = navn-fra-db
Avatar billede showsource Seniormester
23. januar 2008 - 10:47 #4
hmm, f.eks.

$names = array();

$rows = mysql_query("SELECT `id`, `navn` FROM `dintabel` ORDER BY `id`") or die (mysql_error());

if(mysql_num_rows($rows) > 0) {

    while($row = mysql_fetch_object($rows)) {

    $names[$row->id] = $row->navn;
    }

}

mysql_free_result($rows);


if(!empty($names)) {

//brug dit array

}

utestet
Avatar billede showsource Seniormester
23. januar 2008 - 10:48 #5
forskellige sider =>
Brug sessions til at registrere dit array, eller kør funktionen ( hent fra db ) på hver side
Avatar billede cypherbeast Nybegynder
23. januar 2008 - 10:50 #6
ahh ok meget smart. Tak for det. Smid et svar så for du points
Avatar billede nielle Nybegynder
23. januar 2008 - 10:56 #7
function GetData() {
    $result = array();

    $sql = "SELECT id, navn FROM dinTabel ORDER BY navn";
    $query = mysql_query($sql);

    while ($row = mysql_fetch_assoc($query)) {
        $result[] = array('id' => $row['id'], 'navn' => $row['navn']);
    }

    return $result;
}
Avatar billede bobslaede Nybegynder
23. januar 2008 - 11:56 #8
function return_array($result) {
        $array = array();
        $i = 0;
        while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
            foreach ($row as $key => $value) {
                $array[$i][$key] = stripslashes($value);
            }   
            $i++;
        }
        return $array;
    }

$sql = "SELECT id, navn FROM dinTabel ORDER BY navn";
$result = return_array(mysql_query($sql));

$result = array(
  [0] => array(
    [id] => 1,
    [navn] => navn
  ),
  [1] => array(...),
  ...
)
osv...
Avatar billede bobslaede Nybegynder
23. januar 2008 - 11:59 #9
Der blev naturligvis brug mysqli, og ikke mysql til færnævnte.

    function return_array($result) {
        $array = array();
        $i = 0;
        while ($row = mysql_fetch_assoc($result,MYSQLI_ASSOC)) {
            foreach ($row as $key => $value) {
                $array[$i][$key] = stripslashes($value);
            }   
            ++$i;
        }
        return $array;
    }
Avatar billede coderdk Praktikant
23. januar 2008 - 15:32 #10
function return_array($result) {
        $array = array();
        $i = 0;
        while ($row = mysql_fetch_assoc($result,MYSQLI_ASSOC)) {
            foreach ($row as $key => $value) {
                $array[$i][$key] = stripslashes($value);
            } 
            ++$i;
        }
        return $array;
    }

kan i øvrigt skrives:

    function return_array($result) {
        $array = array();
        while ($row = mysql_fetch_assoc($result)) {
            $array[] = $row;
        }
        return $array;
    }

...dog kommer stripslashes ikke med her ;P
Avatar billede showsource Seniormester
23. januar 2008 - 15:49 #11
Jeg er nu mest til mit forslag, atså sætte key lig med id med værdien navn :O)

function return_array() {

$names = array();

$rows = mysql_query("SELECT `id`, `navn` FROM `dintabel` ORDER BY `id`") or die (mysql_error());

if(mysql_num_rows($rows) > 0) {

    while($row = mysql_fetch_object($rows)) {

    $names[$row->id] = $row->navn;
    }

}

mysql_free_result($rows);

return $names;

}


Og b.t.w. samler jeg ikke på point
Avatar billede nielle Nybegynder
23. januar 2008 - 18:43 #12
Jeg vil så til gengæld påpege at mit forslag uden vider kan udvides til ogsåe at fungere hvis det er mere end to felter man er intesseret i. :^)
Avatar billede bobslaede Nybegynder
23. januar 2008 - 22:50 #13
nielle, det kan mit også. Jeg vil endda gå så langt som at sige at mit er en smule bedre ;) Da min funktion virker på alle select queries, og query'en er ikke en del af selve funktionen. :)
Avatar billede coderdk Praktikant
23. januar 2008 - 23:08 #14
Og mit er en simplere version af bobslaedes ;P Og med en kobination af nielles kan det gøres:

        $array = array();
        while ($row = mysql_fetch_assoc($result)) {
            $array[$row['id']] = $row;
        }
Avatar billede bobslaede Nybegynder
24. januar 2008 - 09:10 #15
Det er fjollet det her, hehe.
coderdk:
$array[$row['id']] = $row;

Hvad hvis tabellen ikke indeholder en række der hedder id?

Jeg siger ikke at mit eksempel er det bedste, men det laver dog et multidimensionelt array ud fra en sql query, uanset hvad den indeholder.
Avatar billede coderdk Praktikant
24. januar 2008 - 13:16 #16
bobslaede: Jeg tog bare udgangspunkt i din egen query ovenfor ;P Den skal naturligvis udskiftes med den faktisk ID, hvis man vil opnå samme "fordele" som ved nielles ;)
Denne laver også et multidimensionelt array identisk med dit ud fra en vilkårlig query:

        $array = array();
        while ($row = mysql_fetch_assoc($result)) {
            $array[] = $row;
        }

;)
Avatar billede bobslaede Nybegynder
24. januar 2008 - 13:46 #17
Så er alt jo godt :)
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