Avatar billede razmuz Nybegynder
02. juli 2005 - 11:55 Der er 18 kommentarer og
1 løsning

Udskrive en array

$query2 = "SELECT grupper.navn"
        ." FROM grupper, rel_objekter_grupper"
        ." WHERE rel_objekter_grupper.objektid = $objektid AND rel_objekter_grupper.gruppeid = grupper.id LIMIT 0, 30";
$result2 = mysql_query ($query2) or die ("Invalid query 2");

$tilknytninger = mysql_fetch_row($result2)

Ovenstående forespørgsel henter alle gruppenavne som er tilknyttet et givent objektid! Den laver altså en array med ét felt.

Hvordan får jeg den skrevet ud? Jeg vil helst have et output ser ser således ud:

"Gruppenavn1, Gruppenavn2, Gruppenavn3"

Håber du kan hjælpe!
Avatar billede jaw Nybegynder
02. juli 2005 - 12:06 #1
Tror det her skulle kunne gøre det:

for($i = 0; $i < count($tilknytninger); $i++) {
  echo $tilknytninger[$i].", ";
}
Avatar billede razmuz Nybegynder
02. juli 2005 - 12:20 #2
Er det muligt at gøre det uden en løkke... Kan man ikke bare få den til at udskrive alle felter én efter én... måske noget IMPLODE
Avatar billede jaw Nybegynder
02. juli 2005 - 12:23 #3
Du kan sagtens bruge echo implode($tilknytninger); men så tror jeg du får svært ved at "formatere" dem - altså opdele dem med kommaer etc.
Avatar billede razmuz Nybegynder
02. juli 2005 - 12:25 #4
Hvordan ser en array ud når den kommer fra mysql_fetch_row???
Er det array("Gruppenavn1", "Gruppenavn2", "Gruppenavn3")
Eller hvordan ser den ud?
Avatar billede jaw Nybegynder
02. juli 2005 - 12:26 #5
Ja, præcis. Men implode vil så bare udskrive Gruppenavn1Gruppenavn2Gruppenavn3.
Avatar billede razmuz Nybegynder
02. juli 2005 - 12:30 #6
ok... ja det kan jeg godt se... det bliver svært!

Så accepterer jeg din løkke :)

Kan du så hjælpe med hvordan man undgår at den skriver et komma til sidst i opremsningen?!
Avatar billede nielle Nybegynder
02. juli 2005 - 12:30 #7
echo implode(", ", $tilknytninger);
Avatar billede razmuz Nybegynder
02. juli 2005 - 12:31 #8
Hey... jeg tror jeg har en løsning.

Kan man ikke lave en løkke og så istedet for at udskrive hvor enkelt så tilføjer den bare til slutningen af en string... forstår du?
Avatar billede bromer Nybegynder
02. juli 2005 - 14:40 #9
razmuz: Det kan man godt, men jeg ser ingen grund til det. Det er sådan set korrekt at det kan være svært at formatere data specielt når man benytter implode, men i dette tilfælde er det nielles forslag du skal bruge..

Derudover kan du også lave nogle frække ting, hvis du benytter MySQL version 4.1. Der er nemlig tilføjet group_concat [1] så du kan skrive din query og tilhørerende kode som:

<?php
$query2 = sprintf("SELECT group_concat(g.navn) DESC SEPARATOR ', ' FROM grupper g inner join rel_objekter_grupper og ON (og.objecktid = g.id) WHERE og.objektid = %d",$objektid);

$result2 = mysql_query ($query2) or die ("Invalid query 2");
$tilknytninger = mysql_result($result2,0);
?>

Så burde du have en liste som du gerne vil have i variablen $tilknytninger.

[1] http://dev.mysql.com/doc/mysql/en/group-by-functions.html
Avatar billede bromer Nybegynder
02. juli 2005 - 14:42 #10
jeg fik kopiret lidt for meget.. "DESC" skal naturligvis ikke stå før SEPARATOR. Det blev kopiret fra et eksempel hvor listen blev sorteret før den blev samlet.
Avatar billede razmuz Nybegynder
02. juli 2005 - 14:50 #11
Jeg siger foreløbig tak for svaret... det ser meget avanceret ud men stadig interessant. Jeg er ikke så god til at lave mine udtræk i mysql, så jeg blev helt imponeret over hvad man kan :) Jeg er nød til at løbe - kigger på det imorgen
På forhånd tak
Avatar billede nielle Nybegynder
02. juli 2005 - 14:56 #12
Jeg gentager lige mit svar siden at der øjensynligt ikke er nogen som har set det. implode kan faktisk godt bruges:

echo implode(", ", $tilknytninger);
Avatar billede jaw Nybegynder
02. juli 2005 - 14:59 #13
Citat bromer: "men i dette tilfælde er det nielles forslag du skal bruge.." <- det er vel ret stort udtryk for, at det er set???
Avatar billede nielle Nybegynder
02. juli 2005 - 18:36 #14
jaw> Scuzzi, havde ikke lige lagt mærke til den - forkuserede vist for meget på koden. :^(

Reagerede egentlig også mere på at razmuz ikke havde kommenteret noget.
Avatar billede nielle Nybegynder
02. juli 2005 - 18:37 #15
... og selvfølgeligt også et scuzzi til bromer. :^)
Avatar billede razmuz Nybegynder
03. juli 2005 - 22:03 #16
> nielle
Jeg har set det du har skrevet, men som jaw skriver bagefter vil formateringen af det der kommer ud af implode se helt forkert ud. Der vil ikke være nogle mellemrum! Og det kan jeg ikke bruge!
Avatar billede jaw Nybegynder
03. juli 2005 - 22:06 #17
echo implode(", ", $tilknytninger); vil rent faktisk skrive Gruppenavn1, Gruppenavn2, Gruppenavn 3.
Avatar billede mrgumble Nybegynder
03. juli 2005 - 23:19 #18
Kæft man I roder rundt i de ting.
Hvis I tjekker http://dk2.php.net/manual/en/function.implode.php så er syntaxen for implode:
string implode ( string glue, array pieces )
I skal altså huske, at den består af 2 dele, en streng som skrives mellem ledene i array'en og selve array'en. Så jaw skriver det rigtige, at "implode(', ', $tilknytninger)" vil skrive "Gruppenavn1, Gruppenavn2, Gruppenavn 3".
For at tage fat i det første jaw skrev:
for($i = 0; $i < count($tilknytninger); $i++) {
  echo $tilknytninger[$i].", ";
}
Så vil den skrive "Gruppenavn1, Gruppenavn2, Gruppenavn3, ". En mulig løsning er (bruger lige en anden slags for):
foreach ($tilnytninger as $gruppe) {
  if ($s)
    $s .= ', ';
  $s .= $gruppe;
}
echo $s;

Basta.
Avatar billede nielle Nybegynder
11. juli 2005 - 19:50 #19
Lukketid?
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