Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Czy da się losowo zapisać linie wczytanego pliku ?
Forum PHP.pl > Forum > Przedszkole
inomushis
Witam, chciałem zapytać, czy w PHP istnieje możliwość zapisania lini odczytanego pliku w kolejności losowej.
Np, gdy mamy plik lista.txt:
Kod
a
b
c

Po wykonaniu skryptu wygląda on np tak:
Kod
b
c
a
inomushis
Napisałem coś takiego:
Kod
<?php
$lines = file('playlista.lst');
shuffle($lines);
  foreach ($lines as $line_num => $line) {
      echo "$line";
}

?>

Wszystko ładnie działa, ale pojawił się mały problem.
Na końcu zawsze pojawia się jedna pusta linia kodu.
Jak usunąć ostatnią linie przez zapisaniem questionmark.gif
Cysiaczek
Zdejmij element z końca tablicy http://php.net.pl/manual/pl/ref.array.php
inomushis
Po zdjęciu elementu z tablicy znika jeden plik mp3, a pusta linia kodu nadal pozostaje.
Dodam, że w pliku playlista.lst w momencie umieszczenia go w tablicy nie ma żadnej wolnej linii.
Czy można usunąć tą linie w momencie zapisu do pliku questionmark.gif

Wiem, że można zapisać x lini do pliku, ale gdy dodam nowe mp3, będzie to niewygodne.
Jak sprawdzić, ile lini ma tablica questionmark.gif
Wtedy zapisałbym o jedną linie mniej smile.gif
nowotny
Cytat(inomushis @ 14.02.2008, 15:55:58 ) *
Po zdjęciu elementu z tablicy znika jeden plik mp3, a pusta linia kodu nadal pozostaje.
Dodam, że w pliku playlista.lst w momencie umieszczenia go w tablicy nie ma żadnej wolnej linii.

No bo pewnie zdejmujesz w złym momencie... zobacz jak wygląda tablica zaraz po pobraniu z pliku... pewnie jest jedna pusta linia na końcu pliku...
inomushis
Na końcu nie ma żadnej wolnej linii.
Nawet gdyby była, to przecież używam
Kod
shuffle($lines);


i nie pozostałaby na końcu.
Wygląda to tak, jakby ta linia powstawała gdzieś poza tablicą.
nowotny
Eee... coś ściemniasz... biggrin.gif pokaż te tablice...
inomushis
oto kod
Kod
<?php
$lines = file('playlista.lst');
shuffle($lines);
  foreach ($lines as $line_num => $line) {
      echo "$line";
}

?>


A rezultat jest taki:
http://shells.pl/klnet/sort.php

Jak widać w kodzie źródłowym - na końcu pozostaje wolna linia.
Użycie array_pop - nic nie daje
nowotny
Ja powiedziałem pokaż tablice... czyli print_r($lines); przed i po shufflu...
inomushis
Już dopisałem.
Prosze bardzo smile.gif http://shells.pl/klnet/sort.php
nowotny
Hmm... no tak... "problemem" tu jest znak nowej linii importowany z pliku... każdy element w tablicy go zawiera przez co ostatni element też go ma...

Możesz użyć trim" title="Zobacz w manualu PHP" target="_manual żeby wywalić te znaki i potem w pętli dodawać je samemu sprawdzając czy dany element nie jest ostatnim (wtedy nie dodawać)...
kszychu
@nowotny, a nie prościej i szybciej trimnąć tylko ostatni element tablicy? smile.gif
nowotny
Cytat(kszychu @ 14.02.2008, 16:38:34 ) *
@nowotny, a nie prościej i szybciej trimnąć tylko ostatni element tablicy? smile.gif

No w sumie też można... biggrin.gif

[Pelagia]Czasem jak tak siądę i myślę...[/Pelagia]
inomushis
Gdybym to ja wiedział, jak to napisac rolleyes.gif
kszychu
  1. <?php
  2. $lines = file('playlista.lst');
  3. shuffle($lines);
  4. foreach ($lines as $line_num => $line) {
  5. if($line_num == count($lines)-1) $line = trim($line);
  6. echo "$line";
  7. }
  8.  
  9. ?>

Jasne? Mam nadzieję.
inomushis
Jasne, dzięki.
Jak teraz, co 4 linijki dopisać "mp3/reklama.mp3" questionmark.gif
nowotny
  1. <?php
  2. if($line_num % 3 == 0) echo 'mp3/reklama.mp3'."r\n";
  3. echo $line;
  4. ?>
inomushis
Działa.
Dzięki wszystkim za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.