glad Skrevet 8. april 2013 Del Skrevet 8. april 2013 (endret) Jeg har et PHP script som parser en XML fil med bloggposter. Oppsettet er slik: <posts> <post> <headline>Velkommen til nettsiden min!</headline> <content>Hei og velkommen skal du være. Her kan du lese mye rart. Tralallala. Tiitei</content> </post> <post> <headline>Raghnild er søt</headline> <content>KJHkjdhf dgkdhfgkjfdg fkgjhfdkjghdf gfdkgjhfkjgdf gfdjkghfjkhgkd gkjdfhgkjdfhkg fgkjhdfkjghkdfg fdgjkhdfkjghkdfg dfgkjdfhgkjdfhgkdfhg</content> </post> <post> <headline>Velkommen til nettsiden min!</headline> <content>Hei og velkommen skal du være. Her kan du lese mye rart. Tralallala. Tiitei</content> </post> </posts> Jeg har fått til å printe ut bloggpostene på nettsiden, men jeg får ikke til å iterere over hver headline slik at jeg kan lage en link til hver bloggpost. Er det noen som har noen forslag? function start($parser, $element_name, $element_attrs, $url) { $url = 1; switch($element_name) { case "POST": echo '<div class="post">'; break; case "HEADLINE": echo '<h2 class="postHeadline"><a href="index.php?page=' . $url . '">' ; break; case 'CONTENT': echo '<div class="postText">'; break; } } Jeg ønsker altså at $url skal stige for hver <headline> i XML koden. Hvordan får jeg det til? Bruker denne funksjonen for å printe fra XML: function parseXML($pathtoFile, $url) { // starting the XML parser $parser = xml_parser_create(); xml_set_element_handler($parser,"start","stop"); xml_set_character_data_handler($parser,"char"); $fp=fopen($pathtoFile,"r"); while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } xml_parser_free($parser); } Jeg tenkte orginalt å bare ha en for loop inni while loopen med en teller på url variablet, men fikk det ikke til. Endret 8. april 2013 av glad Lenke til kommentar
stelar7 Skrevet 16. mai 2013 Del Skrevet 16. mai 2013 (endret) du kan jo prøve å endre det til: ge=' . $url++ . '" vet ikke om dette er mulig i PHP dog... Endret 16. mai 2013 av stelar7 Lenke til kommentar
Dan-Levi Skrevet 21. september 2013 Del Skrevet 21. september 2013 (endret) Takk for hjelpen. Dette er sikkert noen kjedelige spørsmål for dere eksperter. Men, nå som jeg har begynt å kode mer så merker jeg at det blir viktig med struktur, spesielt hvis jeg må tilbake for å endre på noe. Hei Gigahertz, jeg er nysgjerrig på hvor langt du har kommet med PHP siden det er noen måneder siden du har postet her. Her er et eksempel basert på koden din som tar i bruk array og henter ut data med en foreach. $personer = [ "Person_1"=>['Navn'=>'Ola','Alder'=>19], "Person_2"=>['Navn'=>'Mons','Alder'=>27] ]; $i = 1; $tilsammen = ''; $allenavn = ''; foreach ($personer as $person) { echo $i.'. '.$person['Navn']." er ".$person['Alder']." år<br/>"; $tilsammen += $person['Alder']; $allenavn .= $person['Navn'].','; $i++; } $allenavn = rtrim($allenavn, ','); $j = $i - 1; echo "Sammenlagt er ".$allenavn.": ".$tilsammen." år.<br>"; Da kan du lett bare tilføye personer så oppdaterer alt seg automatisk $personer = [ "Person_1"=>['Navn'=>'Ola','Alder'=>19], "Person_2"=>['Navn'=>'Mons','Alder'=>27], "Person_3"=>['Navn'=>'Arne','Alder'=>14], "Person_4"=>['Navn'=>'Linda','Alder'=>26], "Person_5"=>['Navn'=>'Knut','Alder'=>65], 'Person_6'=>['Navn'=>'Kari','Alder'=>43] ]; $i = 1; $tilsammen = ''; $allenavn = ''; foreach ($personer as $person) { echo $i.'. '.$person['Navn']." er ".$person['Alder']." år<br/>"; $tilsammen += $person['Alder']; $allenavn .= $person['Navn'].','; $i++; } $allenavn = rtrim($allenavn, ','); $j = $i - 1; echo "Sammenlagt er ".$allenavn.": ".$tilsammen." år.<br>"; Output: 1. Ola er 19 år 2. Mons er 27 år 3. Arne er 14 år 4. Linda er 26 år 5. Knut er 65 år 6. Kari er 43 år Sammenlagt er Ola,Mons,Arne,Linda,Knut,Kari: 194 år. Endret 21. september 2013 av Dan-Levi Lenke til kommentar
Thorbear Skrevet 21. september 2013 Del Skrevet 21. september 2013 Hvorfor initialiserer du en variabel som skal brukes til tall ved å gi en den tom streng? $tilsammen = ''; burde være: $tilsammen = 0; Også ser jeg ingen bruk av $j i kodeeksemplet, men om den verdien skal brukes seinere, så er det vel enklere å initialisere $i med 0 i steden for 1, også inkrementere den i begynnelsen av hver iterasjon i steden for slutten? Da vil nemlig $i holde den verdien du har lagret i $j, og du trenger ikke ha noen -1 for å få det til. Lenke til kommentar
Dan-Levi Skrevet 22. september 2013 Del Skrevet 22. september 2013 Hvorfor initialiserer du en variabel som skal brukes til tall ved å gi en den tom streng? $tilsammen = ''; burde være: $tilsammen = 0; Også ser jeg ingen bruk av $j i kodeeksemplet, men om den verdien skal brukes seinere, så er det vel enklere å initialisere $i med 0 i steden for 1, også inkrementere den i begynnelsen av hver iterasjon i steden for slutten? Da vil nemlig $i holde den verdien du har lagret i $j, og du trenger ikke ha noen -1 for å få det til. Det var et godt spørsmål egentlig, blir det ikke det samme, utgjør det noen forskjell? $j var bare for å få riktig antall personer på en kjapp måte men at $i begynner på 1 så det ser slik ut: $j = $i - 1; Lenke til kommentar
JohndoeMAKT Skrevet 22. september 2013 Del Skrevet 22. september 2013 I PHP spiller det sikkert liten rolle fordi PHP er dumsnill og har skummel magi som fikser det for deg. Dersom du lærer å programmere avhengig av PHPs særegenskaper og vennlige snarveier vil du få store problemer i det du skal bruke et strengere språk. Det er nok en av årsakene til at PHP-programmerere er sett på som de minst kompetente. (Ikke enkeltvis, men sett som ett, ikke bli triste pga. dette utsagnet) 1 Lenke til kommentar
Thorbear Skrevet 22. september 2013 Del Skrevet 22. september 2013 I mange tilfeller vil det ikke ha noe å si fordi PHP foretar casting mellom forskjellige typer helt automatisk, men det kan oppstå problemer med det for enkelte ting, og det kan være en kilde til bugs. Derfor er det like greit å venne seg til å initialisere variabler med den typen de skal ha, det gjør forøvrig også koden mer lesbar. Når det gjelder utsagnet om at PHP-programmerere er sett på som de minst kompetente (i den grad det er sant) så tror jeg det er et resultat av hvor lite som skal til for å få noe til å fungere i PHP, kombinert med de mengdene som har laget tutorials uten selv å kunne gjøre ting riktig. Lenke til kommentar
Dan-Levi Skrevet 22. september 2013 Del Skrevet 22. september 2013 Lærer noe nytt hver dag og jeg er ikke hårsår, bare glad for dere retter og utdyper slik at koden er korrekt, og jeg kommer helt klart til å prøve meg på strengere språk etterhvert så greit å få det inn fra "starten", jeg har vært av og på i ett par år. Lenke til kommentar
Diablonor Skrevet 23. oktober 2013 Del Skrevet 23. oktober 2013 Hei, har et kjapt spørsmål jeg lurer på! Litt info:Jeg driver å setter opp en database, samtidig som jeg setter opp REST api med Laravel. I Laravel har du funksjonaliteten Eager Loading, som jeg gjør superlett å inkludere relevante ressurser i andre ressurser, for eksempel har jeg to ressurser: /images/ og /items/. Når jeg requester alle items, vil jeg kun returnere en liste over alle elementene i ressursen, altså /images/ returnerer alle radene, og alle feltene som er inkludert i tabellen for images. /items/ har derimot et image_id, som er en fremmednøkkel for et image. Her er spørsmålet mitt: Er det bedre å ha mange, små requests, eller få store - Spesielt med tanke på når ressursene er så relaterte at jeg med 99% sikkerhet får bruk for dem samtidig som jeg henter den orginale ressursen? Når jeg for eksempel går på /images/123, vil jeg returnere rad med if 123, og i tillegg returnere alle items som bruker dette bildet. Eller er det bedre å kjøre (I dette tilfellet) 2 requests: /images/123, /items/?image_id=123 ? Det er kanskje også verdt å vite at ressursene som jeg tenker å gjøre dette med, er ressurser som deles av mange brukere, så det vil relativt ofte forespørres. (Dette med tanke på caching). Selv tror jeg en slik ressurs hadde tjent på å sendes sammen med andre ressurser, istedet for å forespørre hver ressurs for seg. Tanker? Lenke til kommentar
Jonas Skrevet 23. oktober 2013 Del Skrevet 23. oktober 2013 Rules Of Optimization 1) Don't. 2) Don't Yet (for experts only). Om en tjeneste gjør et eller to kall mot seg selv har ikke nødvendigvis noe å si og optimalisering av et program med konstant kjøretid kan påstås å ikke være hensiktsmessig før det representerer et problem. Det du derimot kan tenke på er de deler som ikke skalerer. Google f.eks. N+1 query problem. (Når det gjelder spørsmålet--hva med å la APIet støtte et argument som indikerer hvorvidt man ønsker å få tilbake relaterte ressurser?) 1 Lenke til kommentar
Diablonor Skrevet 23. oktober 2013 Del Skrevet 23. oktober 2013 Rules Of Optimization 1) Don't. 2) Don't Yet (for experts only). Om en tjeneste gjør et eller to kall mot seg selv har ikke nødvendigvis noe å si og optimalisering av et program med konstant kjøretid kan påstås å ikke være hensiktsmessig før det representerer et problem. Det du derimot kan tenke på er de deler som ikke skalerer. Google f.eks. N+1 query problem. (Når det gjelder spørsmålet--hva med å la APIet støtte et argument som indikerer hvorvidt man ønsker å få tilbake relaterte ressurser?) Det er jo faktisk en kjekk idé å la det være et argument som bestemmer det, godt tenkt! Når det gjelder N+1 så er poenget med Laravels "Eager Loading" at de løser N+1 problemet! Men det er absolutt noe man burde tenke på. I et tidligere punkt fikk jeg merke N+1 problemet first hand, og hadde plutselig 38 spørringer på en ganske liten side. Lenke til kommentar
TheClown Skrevet 7. juli 2014 Del Skrevet 7. juli 2014 Disse forumene på diskusjon.no har utspilt sin rolle. Folk benytter seg av bedre tjenester som Stackoverflow.com. Jaja, det var moro så lenge det varte. 1 Lenke til kommentar
kilik Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 if ($mysqli->query($querydel)) { // do nothing } Dette gjør at noe blir slettet fra en tabell i et program. Men hvorfor fungerer dette? Jeg oppfatter det som helt tom kode. Altså hvis sant, så skal ingenting gjøres og hvis usant så hopper den bare videre i koden. Men sletter jeg de linjene fungerer ikke slettingen i programmet. Lenke til kommentar
Matsemann Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 Du kjører jo en Query inni if'en. Lenke til kommentar
j-- Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 Noen som har lekt seg med HHVM her? http://en.wikipedia.org/wiki/HipHop_Virtual_Machine HipHop Virtual Machine (HHVM) is a process virtual machine based on just-in-time (JIT) compilation, serving as an execution engine for PHP and Hack programming languages. By using the principle of JIT compilation, executed PHP or Hack code is first transformed into intermediate HipHop bytecode (HHBC), which is then dynamically translated into the x86-64 machine code, optimized and natively executed.[1][4] This contrasts to the PHP's usual interpreted execution, in which the Zend Engine transforms the PHP source code into opcodes as a form of intermediate code, and executes the opcodes directly on the Zend Engine's virtual CPU.[5] Wikipedia har gått over til HHVM, f.eks, og opplever mye bedre ytelse: http://hhvm.com/blog/7205/wikipedia-on-hhvm Lenke til kommentar
kilik Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 (endret) if ($mysqli->query($querydel)) { // do nothing } PHP noob, men slik jeg har lært fra andre språk er det som står inne i parantesene bak if bare en kontroll og ikke noe som blir eksekvert. Men da er det vel å forstå at koden er ekvivalent med: $mysqli->query($querydel); Endret 7. januar 2015 av kilik Lenke til kommentar
j-- Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 if ($mysqli->query($querydel)) { // do nothing } PHP noob, men slik jeg har lært fra andre språk er det som står inne i parantesene bak if bare en kontroll og ikke noe som blir eksekvert. Men da er det vel å forstå at koden er ekvivalent med: $mysqli->query($querydel); PHP kjører koden i if(), og om den ikke returner false så kjøres blokken mellom {}. if($n = 8){ echo '$n: ' . $n; } Vil printe $n: 8 1 Lenke til kommentar
Runar Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 PHP noob, men slik jeg har lært fra andre språk er det som står inne i parantesene bak if bare en kontroll og ikke noe som blir eksekvert. Mulig jeg misforstår, men koden i if() må jo kjøres for å finne ut om selve blokken skal kjøres (hvorvidt resultatet blir true eller false)? Lenke til kommentar
j-- Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 Mulig forvirringen oppstår med forskjellen på enkelt og dobbelt likhetstegn if($n = 8){} if($n == 8){} Funksjoner i if-strukturen må uansett kjøres for å finne ut om de returnerer false. Lenke til kommentar
kilik Skrevet 7. januar 2015 Del Skrevet 7. januar 2015 j-- forklarte det bra. Tror jeg skjønner det nå. Forskjellen på = og == er vel noe av det jeg er inne på ja. Med = utfører programmet en operasjon, med == en logisk kontroll. Jeg regner da med at typen if($variabel = noe) returnerer true hvis operasjonen kan utføres? 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å