Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zapis zawartości tablicy do pliku.
Forum PHP.pl > Forum > Przedszkole
inomushis
Witam,
chciałbym zapytać jak zapisać zawartość tablicy do pliku, ale tak, aby każdy z jej elementów znajdował się w oddzielnym wierszu.
Z góry dzięki za pomoc winksmiley.jpg
Cysiaczek
Dodaj do wartości znak końca lini., czyli "\n"
l0ud
Zakładamy, że jest to 'standardowa' tablica jednowymiarowa (kolejne elementy nazwane cyframi od 0). Przed zapisem po prostu przerób ją na string funkcją implode:

  1. <?php
  2. $s_array = array('jeden', 'dwa');
  3. $string = implode("\n",$s_array);
  4.  
  5. file_put_contents('asd.txt',$string);
  6. ?>


Przy odczytywaniu (jeżeli chcesz to robić) użyj funkcji explode() dla uzyskania na powrót tablicy.
inomushis
Okej, jeden skrypt gotowy.
A teraz, jak zapisać wynik działania takiego skryptu do pliku questionmark.gif
  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. if ($line_num % 6 == 0) echo 'mp3/reklama1.mp3'."r\n";
  7. if ($line_num % 21 == 0) echo 'mp3/reklama2.mp3'."r\n";
  8. echo "$line";
  9. }
  10. ?>

Chodzi o zapisanie gotowej playlisty z wstawionymi reklamami winksmiley.jpg
nospor
pomysl troche: zamiast na ekran (echo) zapisuj tekst do zmiennej. a na koniec zapisz zmienna do pliku

i uzywaj wlasciwego bbcode
l0ud
Coś w tym stylu:

  1. <?php
  2. $lines = file_get_contents('playlista.lst');
  3. $lines = explode("r\n",$lines);
  4. shuffle($lines);
  5. $output_lines = array();
  6.  
  7. foreach ($lines as $line_num => $line) {
  8. if($line_num == count($lines)-1) $line = trim($line);
  9. if ($line_num % 6 == 0) $output_lines[count($output_lines)] = 'mp3/reklama1.mp3';
  10. if ($line_num % 21 == 0) $output_lines[count($output_lines)] = 'mp3/reklama2.mp3';
  11. $output_lines[count($output_lines)] = $line;
  12. }
  13.  
  14. $output_lines = implode("r\n",$output_lines);
  15.  
  16. file_put_contents('playlista.lst',$output_lines);
  17. ?>
arecki
A nie prościej:
  1. <?php
  2. file_put_contents('filename.txt', serialize(array('jeden', 'dwa', 'trzy')));
  3.  
  4. $array = unserialize(file_get_contents('filename.txt');
  5. ?>

?

Ps. Wiem że ma być jedna linia w jednym pliku ale jeżeli plik ten jest wykonywany tylko na potrzeby PHP to spokojnie to co powyżej powinno wystarczyć
hugo_z_doliny_pomaranczy
Witam! Ja mam podobny problem z zapisem tablicy do pliku tekstowego, tylko chodzi mi o zapisanie tablicy dwuwymiarowej. W poniższym kodzie załadowałem tablicę z pliku tekstowego, chciałem usunąć jeden wiersz z niej posługując się zmienną "kod" z formularza, zamieniłem tablicę na string posługując się funkcją explode no i chciałem zapisać ją znowu do tego samego pliku. Oto kod:

  1. <?php
  2.  
  3. //deklaracja zmiennych
  4. $DOCUMENT_ROOT=$_SERVER['DOCUMENT_ROOT'];
  5. $kod=$_POST['kod'];
  6.  
  7.  
  8. //usuwanie towaru
  9.  
  10. //ladowanie pliku do tablicy
  11. $tablica=file("$DOCUMENT_ROOT/bazatowarow.txt");
  12. //sprawdzenie czy baza nie jest pusta
  13. $ilosctowaru=count($tablica);
  14. if ($ilosctowaru==0)
  15. { echo "<p><strong>Brak towarów w bazie.<p></strong></body></html>"; exit;}
  16. //podzielenie tablicy na tablice dwuwymiarowa
  17. for ($x=0; $x<$ilosctowaru; $x++)
  18. {$linia=explode("\t",$tablica[$x]);}
  19. //usuniecie wiersza z pomocą zmiennej kod
  20. if ($tablica[$x][0] == $kod) {
  21. unset ( $tablica[$x][0] );
  22. unset ( $tablica[$x][1] );
  23. unset ( $tablica[$x][2] );
  24. }
  25. //zamiana tablicy w string
  26. $string = implode($tablica);
  27. //zapisanie nowej tablicy i zamkniecie pliku
  28. $ciągzapisu=$string;
  29. $usun=fopen("$DOCUMENT_ROOT/bazatowarow.txt",'wb');
  30. fwrite($usun, $ciągzapisu);
  31. fclose($usun);
  32. echo "<p><strong>Towar usunięto!<p></strong>"
  33. ?>


W przeglądarce to:

Notice: Undefined offset: 3 in C:\xampp\htdocs\bazatowarow\przetworzusun.php on line 24

Towar usunięto!

ale w pliku tekstowym nie usuwa wiersza, zawartość pozostaje ta sama.

Dopiero zaczynam przygodę z PHP, więc bardzo możliwe, że robię jakiś bardzo prosty błąd. Z góry dzięki za jakiekolwiek uwagi.
nospor
Wyswietla ci tekst "Towar usunieto" bo ty go wyswietlasz bezwarunkowo, niezaleznie czy usunales czy nie.... Wyswietlaj go tylko wteedy, gdy usuniecie naprawde mialo miejsce....

Sprawdz, czy ci w ogole wszedl w tego IFa z unset. Sprawdz inne miejsca. Naprawde, od sprawdzenia pewnych rzeczy glowa nie boli.

zrob sobie print_r($tablica); i zobacz co tam masz. A tam nie masz tablicy dwuwymiarowej, jak ci sie wydaje, wiec nie mozesz robic IF jakby tam byla tablica dwuwymiarowa.
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.