Gå til innhold

Inkludere kun de 5 øverste linjene fra en fil?


Anbefalte innlegg

Heisann!

 

Driver å lager meg noen enkle nyhetsgreier på siden min, og jeg har ett arkiv(en php fil) med alle nyhetene i:

 

		  <p>6 » <a href="nyheter.php?id=artikkel7">Les mer</a></p>
	  <p>5 » <a href="nyheter.php?id=artikkel5">Les mer</a></p>
	  <p>4 » <a href="nyheter.php?id=artikkel4">Les mer</a></p>
	  <p>3 » <a href="nyheter.php?id=artikkel3">Les mer</a></p>
		  <p>2 » <a href="nyheter.php?id=artikkel2">Les mer</a></p>
	  <p>1 » <a href="nyheter.php?id=artikkel1">Les mer</a></p>

 

Så skal jeg vise nyhetene på forsiden, men vil kun inkludere de 5 øverste. Hvordan gjør jeg dette?

 

Setter pris på svar.. :)

Endret av AnaXyd
Lenke til kommentar
Videoannonse
Annonse

$filnavn = 'bane/fil.php';
$linjer = 5;

$news = '';

$f = fopen($filnavn, 'r');
while ($linjer) {
 $news .= fgets($f);
 $linjer--;
}
fclose($f);
echo $news;

 

alternativt:

$filnavn = 'bane/fil.php';
$start = 0; // 0 er første linje
$slutt = 5;

$linjer = $slutt - $start;

$f = fopen($filnavn, 'r');
while ($start) {
 fgets($f);
 $start--;
}

while ($linjer) {
 echo fgets($f);
 $linjer--;
}

fclose($f);

Endret av grimjoey
Lenke til kommentar

Takk! Det funket med en gang.. :)

 

EDIT: Bare en ting som jeg burde få fikset, og det er at det blir litt rotete i koden i ferdigformat:

 

<p>Alpakkatrekkene er nå på lager! » <a href="news.php?id=artikkel8">Les mer</a></p>

<p>Regionsmessa er like rundt hjørnet! » <a href="news.php?id=artikkel7">Les mer</a></p>

<p>Putene ankommet, stand bygges og messe igang! » <a href="news.php?id=artikkel6">Les mer</a></p>

<p>TendoUB skal på Hadelandsmessa! » <a href="news.php?id=artikkel5">Les mer</a></p>

<p>TendoUB har vært på syretest » <a href="news.php?id=artikkel4">Les mer</a></p>
  			<br />

Veldig mye opprom som skaper litt uryddighet...

Endret av AnaXyd
Lenke til kommentar

Jeg endret koden noen ganger. Slik den er nå skal den inkludere nøyaktig slik det står i filen. (Jeg hadde en linjeskift ekstra mellom hver linje i starten)

 

Den første koden henter fra starten av fila. Den andre koden kan hoppe over en bit. fint hvis du vil hente linje 17 til linje 34 for eksempel.

Lenke til kommentar

Grimjoey: Du vet at while()-løkker ikke skal brukes til dette? Det er dette vi har for() til!

 

Oppdatert kode, med forklaringer:

<?php

/*
* Filen som teksten skal hentes fra.
*/
$file = 'bane/til/filen/som/skal/lese.php';

/*
* Antall linjer som skal hentes.
*/
$lines = 5;

/*
* Åpne filen som er angit i $file, med modusen "Åpne kun for lesing med pekeren på begynnelsen av filen".
*/
$f = fopen($file, 'r');

/*
* Løkken skal kjøres så lenge $i er mindre eller lik $lines (5).
* For hver "runde" leggse det til 1 på variabelen $i, samt en ny "linje" i
* variabelen $news. Om du har punktum forran likhetstegnet vil ikke
* det nåværende innholdet bli overskrevet av det nye. Det nye vil bare bli lagt til.
* Grunn til at man gjør det slik i stede bare for echo/print inni løkker er at siden vil bli
* betydelig treger etter hvert som innholdet blir større; echo/print inni løkker => fy fy.
*/
for ($i = 1; $i <= $lines; $i++) {
$news .= fgets($f);
}

/*
* Stenge filen for lesing. Denne er strengt tatt ikke nødvendig da
* php stenger filen selv når den er ferdig med å kjøre scriptet.
*/
fclose($f);

/*
* Printe ut innholdet i $news;
*/
echo $news;

?>

Endret av BigJackW
Lenke til kommentar

kan du forklare hvorfor?

 

edit:

$antall = 5;

while($antall) {

$antall--;

}

 

gjør det samme som:

 

$antall = 5;

for($i = 0, $i < $antall, $i++) {

}

 

men while gjør det trolig raskere og krever kun en variabel (bruker mindre minne). virker sikkert ubetydlig, men jeg liker å gjøre koden min så effektiv som overhode mulig.

Endret av grimjoey
Lenke til kommentar

<html><body><pre>
<?php


$t = microtime(true);
$antall = (int)$_GET['antall'];
while ($antall--) {
}
$t = microtime(true) - $t;

$tt = microtime(true);
$antall = (int)$_GET['antall'];
for($i = 0; $i < $antall; $i++) {
}
$tt = microtime(true) - $tt;

echo 'while: '.$t."\n".'for: '.$tt;

?>
</pre></body></html>

 

http://localhost/test/whilefor.php?antall=99999999

 

>>

 

while: 5.1529901027679

for: 9.3671061992645

 

edit:

endret:

while ($antall) {

$antall--;

}

til:

while ($antall--) {

}

 

resultat:

while: 3.8344738483429

for: 9.1322040557861

 

med andre ord mer en dobbelt så rask, selv om det er snakk om sekunder og ekstremt mange iterasjoner.

 

du har et godt poeng angående echo i loop da.

Endret av grimjoey
Lenke til kommentar

Glemt det. Dreit meg ut, glemte ?antall=xx

 

Men denne forskjeller er så umerkbar at den ikke er vits å ta hensyn til.

 

Si meg når kjører du en løkke 100 mill ganger? :p

Om du hadde kjørt den opptill så mange ganger så skal jeg være enig med deg i at while ville vært bedre.

 

 

Min mening er man bruker for() til slike ting som f.eks. problemet til trådstarter, og while til å hente all data fra f.eks. MySQL (mysql_fetch_object() osv.)

Endret av BigJackW
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...