akbern Skrevet 2. juli 2014 Del Skrevet 2. juli 2014 Hei.Jeg har laget en tabell hvor innholdet fra min MySQL-database presenteres, men har noen spørsmål angående sortering av denne vha PHP.Det å sortere alfabetisk er enkelt, for det klarte jeg helt selv Men jeg vil i tillegg at dataene skal sorteres i kategorier, dvs under A, B, C, D...etc.La oss si at jeg har en php som echo'er ut $frukt.Det jeg vil, er å få presentert de ulike fruktene (som ligger i databasen) på følgende måte i tabellen:A aprikos appelsin B banan etc.Er det noen som kan hjelpe meg med dette?På forhånd takk. Lenke til kommentar
Dan-Levi Skrevet 3. juli 2014 Del Skrevet 3. juli 2014 Hei klart det! <?php require_once 'core/init.php'; $db = new Database; // Databaseklasse PDO // Spekter $lr = range('A','Z'); $fl = array(); //Klargjør array for liste over frukter foreach ($lr as $l) { //Foreach letter $r = $db->getInstance()->get('frukt_tabell',array('letter','=',$l)); //Hent frukt for bokstav if ($r->results()) { //Hvis det er noen resultater //Dette er fruktene med under gjeldene bokstav $fruits = $r->results(); //For hver frukt putt inn i array med bokstav foreach ($fruits as $fruit) { $fruitlist[$l][] = $fruit; } } } ?> Det ble mye for et innlegg så jeg satt opp et fungerende eksempel her. Bare spør om du lurer på noe. Lenke til kommentar
uGn Skrevet 3. juli 2014 Del Skrevet 3. juli 2014 Bare spør om du lurer på noe. Du må oppdatere google api-keyen din 1 Lenke til kommentar
akbern Skrevet 3. juli 2014 Forfatter Del Skrevet 3. juli 2014 @JanTerjeRiisOttoJohansen: Duverden. Tusen takk Litt annerledes fremgangsmåte enn jeg hadde regnet med, men jeg skal sette meg inn i dette, nå som jeg straks har tre uker sommerfri. Lenke til kommentar
Crowly Skrevet 3. juli 2014 Del Skrevet 3. juli 2014 (endret) Alt du trenger å gjøre er å kjøre en substr funksjon på fruktnavn feltet fra databasen før du setter det inn i en array // koble til databasen og hent ut data her $fruits = array(); // $dbFruitsData = resultatet fra databasen/select'en foreach ($dbFruitsData as $fruit){ $firstLetter = mb_substr($fruit,0,1); $fruits[$firstLetter][] = $fruit; } // sjekk innhold i $fruits echo '<pre>' . print_r($fruits, true) . '</pre>'; Endret 3. juli 2014 av Crowly Lenke til kommentar
akbern Skrevet 3. juli 2014 Forfatter Del Skrevet 3. juli 2014 Hei igjen.Det ble litt vrient for meg med alle disse oppdiktede $fruit, så jeg tror det er like greit at jeg poster hele php'en min. Hvordan kan jeg få smeltet det dere her har skrevet sammen med koden min?(Database-tabellen min inneholder også en kolonne som heter "first_letter" om det hjelper...) Her kommer koden:<?php //Include login include " ";$result = mysql_query("SELECT * FROM blomstergalleriet ");$num_rows = mysql_num_rows($result);echo "<p class='text-info'>Galleriet inneholder for tiden $num_rows ulike arter av planter.</p>";?> <div id="results"> <div class="row"> <div class="col-xs-12"> <?php header("script-type: text/css"); $sql = mysql_query("SELECT * FROM blomstergalleriet ORDER BY name_no "); $limit = 2; $count = 0; echo "<div class='container'> <div class='row'> <div class='col-md-8'> <div class='col-xs-12'><table class='table table-striped table-hover' width='100%'>"; while($row = mysql_fetch_array($sql)){ $site_link = $row['site_link']; $name_no = $row['name_no']; $name_lat = $row['name_lat']; $species_thumb = $row['species_thumb']; if($count < $limit){ if($count == 0){ echo "<tr>"; } echo"<td><a href='$site_link'><img src='/grafikk/$species_thumb' width='60' height='55' float='left'/></a> <br/><a href='$site_link'> $name_no </a> <em>($name_lat)</em></td>"; }else{ $count = 0; echo "</tr><tr><td><a href='$site_link'><img src='/grafikk/$species_thumb' width='60' height='55' float='left'/></a> <br/><a href='$site_link'> $name_no </a> <em>($name_lat)</em></td></td>"; } $count++; } echo"</tr></table>";?> Lenke til kommentar
Dan-Levi Skrevet 3. juli 2014 Del Skrevet 3. juli 2014 Bare spør om du lurer på noe. Du må oppdatere google api-keyen din I alle Jeg har faktisk generert ny On Topic: header(); Kan ikke kalles etter at noe er output, det være seg HTML-kode, tomme linjer i en fil, eller fra PHP, så header("script-type: text/css"); må bort. Jeg har sagt det før og sier det igjen, disse gamle php funksjonene må du slutte å bruke. Jeg anbefaler deg å sette deg inn i MySQLi eller PDO nå, før du går noe videre. Lenke til kommentar
etse Skrevet 3. juli 2014 Del Skrevet 3. juli 2014 (endret) å ha en egen kolonne for "first-letter" virker meget redundant. Du kan jo bare gjøre en spørring som er sortert etter navnet for så å enten dele de opp i et array - eller bare oppdage det i printinga. F.eks. følgende tabell: CREATE TABLE frukt ( id INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY(id)hent ut frukt med følgende spørring: SELECT * FROM frukt ORDER BY name;Printing: <?php $alphas = range('A', 'Z'); $letter_num = 0; printf("<h1>A</h1>"); while($row = mysql_fetch_assoc($result)){ while($alphas[$letter_num]] != $row["name"][0]){ printf("<h1>%s</h1>", $alphas[++$letter_num]; } printf("%s<br>", $row["name"]); } ?>(Denne kan selvfølgelig forbedret med å bruke liste-elementer, og tilpassses etter behov) Eksempel-output: A Apple Avocado B Banana C D Damson Plum Endret 4. juli 2014 av etse Lenke til kommentar
Rasjonelt Skrevet 3. juli 2014 Del Skrevet 3. juli 2014 php ser veldig tungvint ut. jeg hadde funnet en ny jobb. Lenke til kommentar
akbern Skrevet 4. juli 2014 Forfatter Del Skrevet 4. juli 2014 Nå er det sånn at det finnes hundrevis av tutorials der ute hvor hundrevis av personer mener hundrevis av ulike ting og har hundrevis av ulike løsninger. Jeg har ikke funnet opp php-koden min selv Men den fungerer, og det er det viktigste for meg.Takk for svar Lenke til kommentar
Crowly Skrevet 4. juli 2014 Del Skrevet 4. juli 2014 Grunnen til at man sier man skal gå vekk i fra mysql_* funksjonene, er at de er gamle og er ikke lenger støttet/slutter å virke i PHP 5.5. Problemet med tutorials man finner på nettet er at de ikke blir oppdatert eller fjernet når de er utdaterte, derfor ser man at de fleste benytter mysql_* i stedet for mysqli_* eller pdo. php ser veldig tungvint ut. jeg hadde funnet en ny jobb.Hvis du ikke har noe å bidra med, så gå ett annet sted. Hvis du syntes dette ser tungvindt ut så syntes du programmering/skripting ser tungvindt ut. Dette er rimelig standard syntaks på tvers av de fleste språk (men noen få variasjoner). PHP sin syntaks er basert på C, og er dermed veldig lik alle andre programmeringsspråk som også er basert på C. Lenke til kommentar
quantum Skrevet 4. juli 2014 Del Skrevet 4. juli 2014 å ha en egen kolonne for "first-letter" virker meget redundant. Du kan jo bare gjøre en spørring som er sortert etter navnet for så å enten dele de opp i et array - eller bare oppdage det i printinga. Egen bokstav-kolonne er neppe nødvendig, nei, og å kjøre en spørring pr. bokstav er heller ikke å anbefale, stemmer for etses forslag isteden. Lenke til kommentar
TheClown Skrevet 7. juli 2014 Del Skrevet 7. juli 2014 (endret) Dere gjør ting utrolig vanskelig. Koden kan gjøres så enkelt som følgende: <?php $current_letter = null; foreach ($result as $fruit){ $this_letter = substr($fruit, 0, 1); if ($this_letter != $current_letter) { echo '<h2>' . $this_letter . '</h2>'; $current_letter = $this_letter; } echo '<p>' . $fruit . '</p>'; } Endret 7. juli 2014 av TheClown 1 Lenke til kommentar
etse Skrevet 7. juli 2014 Del Skrevet 7. juli 2014 Ser flere her bruke substr til å peke på første bokstav - jeg vil påstå det er litt dårlig måte å gjøre det på. Bruk heller array-notasjon, som helt fint fungerer på stringer i PHP. Dette vil lage mer lesbar kode, samt fort kan være raskere i tillegg. Videre vil jeg si at jeg ikke er veldig fan av denne måten mange folk i PHP bruker echo for å skrive ut HTML - men dette er trolig en smakssak. Selv synes jeg printf er mye mer oversiktlig. Men den enkle printingen gjort her gjør det nesten ingen forskjell. Lenke til kommentar
TheClown Skrevet 22. juli 2014 Del Skrevet 22. juli 2014 Ser flere her bruke substr til å peke på første bokstav - jeg vil påstå det er litt dårlig måte å gjøre det på. Bruk heller array-notasjon, som helt fint fungerer på stringer i PHP. Dette vil lage mer lesbar kode, samt fort kan være raskere i tillegg. Videre vil jeg si at jeg ikke er veldig fan av denne måten mange folk i PHP bruker echo for å skrive ut HTML - men dette er trolig en smakssak. Selv synes jeg printf er mye mer oversiktlig. Men den enkle printingen gjort her gjør det nesten ingen forskjell. Var ikke en gang klar over at PHP hadde støtte for array-notasjon (eller string modification by character som det heter). Dette kom i PHP5 og er kanskje grunnen til at jeg aldri har hørt om det før. At du foretrekker printf fremfor echo syntes jeg derimot er veldig rart. I PHP vil du i 9/10 tilfeller finne echo fremfor printf. Grunnen er vel i bunn og grunn at i et weaktyped-språk som PHP, som er printf-funksjonaliteten overflødig. Den tilbyr ikke noe mer enn det echo gjør. I andre (strong typed) språk, er den derimot veldig kjekk. Lenke til kommentar
etse Skrevet 22. juli 2014 Del Skrevet 22. juli 2014 Det finner i det hele det samme til hvorfor jeg heller skriver følgende i python print "{} * {} = {}".format(tall1, tall2, tall1*tall2)fremfor dette: print tall1, "*", tall2, "=", tall1*tall2jeg synes rett og slett at når man skal ha strengutrykk som tar hensyn til litt flere variabler så er det mer ryddig og holde variablene utenfor selve print-statementet. Nå vet jeg PHP støtter at man skriver variablene direkte inn i stringen - men om det da står en plass i strengen "$usd" så er det ikke direkte intuitivt om de her henviser til variabelen $usd, eller om de faktisk ønsker å printe det som tekststreng. I tillegg kan man få litt issues fordi man brukte feil type tøddler. Men jeg vil ikke påstå det er noe rett eller galt her eller at min metode egentlig er bedre. Jeg trives bare bedre med printf og synes det er mer ryddig og intuitivt. Og har i det minste noen grunner til det Lenke til kommentar
Crowly Skrevet 22. juli 2014 Del Skrevet 22. juli 2014 ... om det da står en plass i strengen "$usd" så er det ikke direkte intuitivt om de her henviser til variabelen $usd, eller om de faktisk ønsker å printe det som tekststreng. I tillegg kan man få litt issues fordi man brukte feil type tøddler.Bare for å pirke litt, skal man være veldig korrekt så skal man omgi variabler med krøllparenteser når de er inne i en streng. Og det fungerer bare med " (double quote) $var1 = 'World'; // dette vil fungere echo "Hello $var1"; // dette er mer nøyaktig da det forteller php hvor variabelen begynner og slutter // en god editor vil da også endre fargen til variabel fargen, som gjør det enda mer lesbart echo "Hello {$var1}"; // dette fungerer ikke echo 'Hello {$var1}'; echo 'Hello $var1'; Selv foretrekker jeg echo 'Hello '.$var1; da får man ikke problemet med ' eller " Lenke til kommentar
Gjest Slettet-IHWlGMJn Skrevet 30. juli 2014 Del Skrevet 30. juli 2014 Du spør om hvordan du gjør det i PHP og det har vel blitt besvart, men du vil nok egentlig la MySQL selv ta seg av dette: SELECT SUBSTRING(name,1,1) AS first_letter, name FROM fruits ORDER BY first_letter, name Lenke til kommentar
Hayer Skrevet 22. august 2014 Del Skrevet 22. august 2014 Ser heller for meg at Web 2.0 / 3.0 løsningen vil være å sortere på klientsiden med java-script. Lenke til kommentar
etse Skrevet 22. august 2014 Del Skrevet 22. august 2014 Ser heller for meg at Web 2.0 / 3.0 løsningen vil være å sortere på klientsiden med java-script.Dette er det ikke noe fastit på. Det har ulike fordeler og ulemper. SQL-databaser er ofte meget flinke på sortering - og med bruk av indekser kan de være utrolig raske. Og om man kjører slik logikk på klientsiden vil det slike prosessorkraft og eventuelt batteri hos brukeren. Og i disse mobildager er det litt greit å ha i tankene at om alle skal kjøre logikk på klientsiden vil det sluke masse strøm. 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå