I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
roenving -> tror desværre ikke at den holder. Hvad sker der hvis den sidste post ender med at få tilknyttet $i-værdien 1 ?? Så kommer der en td for lidt, og der kommer til at mangle en </tr>.. gør der ikk??
Jeg ved ikke om det virker.. Har ikke testet. (skrev den bare her i vinduet).. men også mest for at vise hvad jeg mener.. den kan garanteret også gøres LANGT bedre, og kortere. Men det kan der arbejdes videre på hvis den virker..
Hvis du ikke skal bruge det til andet er der da igen grund til at skulle tælle alle posterne ?? while($brede*(ceil(count($indhold)/$brede))>$i){ //Sku godt fundet på .. ;)
og så har du en MASSE variabler der hele tiden skal skiftes.. Der kan du vel også nøjes med en?? (ved godt jeg til gængælde slutter af med en for-løkke.. meeen.. og hvis det er bredden der gør det kan den også saktens sættes ind..
PS, skal lige siges at mit er testet og lavet så det stiller kildekoden pænt op... (alle række bliver også lige brede, og hvis breden er et kommetal bliver disse afrundet...)
koden ville kunne laves lidt kortere ved at benytte en for løkke... men gad ikke lige ændre det...
dea_pg -> Min er RIGTIG pæn når den kommer op.. ;) og der kan du også vælge bredden på alle cellerne.. men vel egentlig ikke det der er det væsenligste??
hvis du vil rundet den op kan du også bare lave en
jeg vil lige forbedre den lidt... her er en lidt kortere version...
<?php
// settings
$brede = 2; // antal billeder på en række... $brede_paa_table=400; // brede på tabellen i pixel $mhost = "localhost"; // mysql host $muser = "user"; // mysql bruger $mpaswd = "paswd" // mysql password $mdb = "db"; // mysql database $mquery = "SELECT * FROM gallery"; // mysql query'et
her lige testet mit og det virker, det laver de 2 rækker som du spørger om...
nicklasb, jeg har fjernet den ene variabel... glad? og jeg bruger alligevel optællingen til at tjekke om der er nogen billeder
<?php // settings $brede = 2; // antal billeder på en række... $brede_paa_table=400; // brede på tabellen i pixel
$mhost = "localhost"; // mysql host $muser = "user"; // mysql bruger $mpaswd = "paswd"; // mysql password $mdb = "db"; // mysql database $mquery = "SELECT * FROM gallery"; // mysql query'et
har lige prøvet at sætte det op, og der var lige et par enkelte fejl.. men ideen var der, og der er altså overhovedet ikke brug for så mange udregninger heller.. prøv dette:
og kom evt med en fejlmeddelelse hvis der kommer en.. ;) og dea_pq -> Det handler SLET ikke om at jeg skal være glad.. Jeg er faktisk rigtig glad lige nu.. men ikke pga. du lavede dit script om.. Jeg er bare ude efter at det skal være en holdbar og GOD løsning frem for alt. Hvis det er pga. de skide point, du spørger, kan du bare tage dem. jeg er bedøvende lige glad med dem.. ;)
og problemet jeg har rettet med en $i = $i+1; kunne også bare have været rettet med en $i++ .. ved ikke hvad jeg har tænkt på siden jeg har skrevet $i = $i++ ;) hehe..
nicklasb => næ... har 5k point... og hvad skal jeg bruge dem til? så jeg er somend også lige glad med pointene... (glemte at sætte et ;) bagefter for at antyde det var ironi... sorry)
men jeg tvivler på at det vil tage mange ex. milisek. at lave de få udregninger... den mest tidskrævende er nok mysql_num_rows, og den bruges jo til at afgøre om der skal stå "ingen billeder"... men lad os dog lave lidt tidstagning... finder lige et script til at lave "execution time"... så kan vi se om mit faktisk er så meget langsommere... (jeg giver mig gerne hvis fakta siger at jeg har uret)
Næh, du bliver nødt til at lave en anden struktur, da du vil skrive kommentar til billede 1 *efter* du har skrevet billede 2 -- så kan det være at Mortens array vil være smart ...
hmm.. mystisk.. jeg kørte den nu bare engang hver. og så med en microtime ud over.. dem trækkede jeg så fra hinanden.. og det er hvad du kan se på den side.. der kan du også bare opdatere.. (fejler vel ikke hele tiden.. ;)
men ok.. det er ikke meget. Men er aligevel ikke i tvivl om hvilken jeg ville vælge.. (SLET ikke)
dea+nicklasb: Hvis I vil lave en reel sammenligning af koden, skal I lave et eller andet der printer 500-1000 billeder ud i en html-tabel - da det udelukkende er den proces der varierer i metoderne - problemet hvis man tester med for lille et datamateriale er at den brugte tid domineres af db-operationerne og dermed primært afhænger af det load db-serveren har på det tidspunkt! Dvs. den ene metode til at generere html-tabellen kan sagtens være overlegen, men hvis datamaterialet ikke er stort nok kan det ikke ses af tidsforbruget.
Her er mit forslag til en optimeret udgave af koden - glæder mig til at høre resultatet, hvis en af jer gider teste det med en tabel med 300-400 celler/billeder!
<?php $kolonner = 2; // antal billeder pr række $tablewidth = 400; // pixelbredde på tabellen $cellwidth = (int) ($tablewidth / $kolonner); //cellebredde
$mhost = 'localhost'; // mysql host $muser = 'user'; // mysql bruger $mpaswd = 'paswd'; // mysql password $mdb = 'db'; // mysql database
$mquery = 'SELECT image FROM gallery'; // mysql query'et
if(!($i%$kolonner) && $i>0 && $i<$antalimgs) { //problem med tom startrække og potentiel tom slutrække fikset
-hvis antallet af billeder passede perfekt til antallet af celler, ville den tidligere kodestump slutte af med en tom række - det er ikke længere tilfældet.
Hurtig opsumering: --- Hvert script kørt 50 gange, op mod en database med 453 poster... Nicklasb = 0.02653204 Dea_PG = 0.0307763 Tipsen = 0.01761364 ---
jeg må give mig.. ;) har lige lavet samme forsøg, og fik meget tæt på same resultater som dea_pq gjorde 11/05-2003 11:08:44 Dog var dea_pq's selv, en smule langsommere (0,3923239)
SÅ skal min optimeres.. :D.. ej.. gidder ikke selv nu.. tror den er kommet langt nok ned, med tipsens forslag.. hehe.. ;)
(Jeg har pillet siden ned, da der er en eller anden der har requestet siden over 1100 gange.. (Selv om jeg ikke lige kan se hvad det skal bruges til..:) men pyt.. min egen server = min egen skyld = er lige glad nu, efter en reboot.. Hvis der er nogle der skal se mere på den, må i endelig bare sige til.. så kommer den op igen..
(det gav også lige 600 ekstra requests i min log fil at jeg lavede de tests... min server kører bare fra min normale arbejdscomp (se stats for den på mfa.ath.cx). Min linux server køre nemli' ik så godt endnu... og den larmer for meget til at jeg gidder have den stående)
har også taget de ikke cachede sider ned nu, lavede en header("LOCATION: cached_v2.html"); på de ikke cachede... hvis I vil have jeg skal køre testene igen, så kan jeg godt gøre det.. men ellers må i nøjes med de cachede resultater...
og nu er det jo ikke fordi at 0.02 sek er lang tid... for 450 poster... ;) der kommer jo nok en LIMIT ind på et tidspunkt...
gangede det med 10.. for flere decimaler.. ;) så kun 0,01.. men de andre var langt hurtigere end i din test, hvis man kigger sådan på det.. jeg stillede samme krav for dem alle.. så håber da det er godt nok..
neeej.. det var såmendt i nat, der var en der havde reloaded 1100 gange (2200 kald på hver post)
men tror også den er GODT optimeret nu.. altså med de 0.01752467 fra tipsens. (Godt nok meget jeg har fået rodet os ud i, for at lave et lille script der lister et par poster fra en database.. tihi.. ;)
Den primære optimering i min er at udelade de mange kald til echo - det betyder meget! Jeg kan ikke lige overskue det med den sidste linie, hvorfor det kikser og jeg gider vist heller ikke bruge mere tid på det :-)
godt tip.. :) Har aldrig rigtig prøvet at optimere så langt ned, da det er min egen server det går ud over.. så jeg er lidt lige glad.. er der egentligt noget problem i at skrive $etellerandet = " tekst"; //mellemrum i streng?? og $etellerandetandetenddetdervarderfør = "tekst tekst
tekst"; // Linieskift??
eller er det bare for syns skyld?? (NU vil jeg lærer det en gang for alle..!)
nicklasb: Der er ikke noget galt i det - jeg synes bare det er pænere med \n\r\t i stedet for - men min metode kræver så også, at strengen omkranses af "" og ikke '', da strengen skal parses af php for at lave escape-koderne om til linieskift, tabulatorstop osv. I dit eksempel ovenfor kan strengen godt omkranses af '', hvilket er hurtigere end "" da php ikke behøver at bruge tid på at kigge strengen igennem for at se om der er escape-koder og variable der skal behandles!
Her er noget kode jeg har brugt til at lave en dvdliste, jeg håber at du selv kan rette det til. <?php $result = "<table>\n"; $moviequery = mysql_query(" SELECT name, path, imdb FROM dvd ORDER BY name ASC"); $i_tmp = 1; $i_antal = 2; while($movieinfo = mysql_fetch_array($moviequery)) { if($i_tmp == 1) $result .= "\t<tr>\n"; $result .= "\t\t<td class=\"dvd\">\n\t\t\t<a href=\"http://us.imdb.com/Title?".$movieinfo['imdb']."\"><img src=\"".str_replace("&","&",$movieinfo['path'])."\" align=\"left\" width=\"104\" height=\"140\" alt=\"".$movieinfo['name']."\" border=\"0\"></a>\n\t\t</td>\n"; if($i_tmp == $i_antal) $result .= "\t</tr>\n"; $i_tmp = ($i_tmp == $i_antal ? 1 : $i_tmp+1); } $result .= "</table>\n"; print $result; ?>
otis: Du glemmer også at fylde tomme celler på, hvis antallet af billeder ikke går op... - og så er det heller ikke sikkert, at din kode husker at afslutte sidste række ordentligt... - standard-fejl som er ryddet af vejen i de øvrige udgaver her på siden.
floetti => det er ikke bare gode forslag, det er nok bedre forslag en du selv ville have fundet på (ikke for at sige noget ondt om dig)! alle forslag er testet og optimeret så meget at de er rigtigt gode og hurtige... de sørre for at stille koden pænt op, og får afsluttet alt hvad der skal afsluttes...
så jeg synes det var rigtigt dumt af dig at lukke spørgsmålet sådanne!
---
og for at følge exp.dk's regler, så skal dit løsning vises så andre kan drage nytte af den!
---
!nørd
Morten
Synes godt om
Ny brugerNybegynder
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.