Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wiele tablic w pliku do tablicy
Forum PHP.pl > Forum > Przedszkole
jaroo88
Witam!

Mam plik z wieloma tablicami oddzielonymi separatorem (999). Tablice mają strukturę:

001;"tekst"
002;"tekst"
003;"tekst"
999
001;"tekst2"
...

Mam skrypt z manuala, ale niestety nie potrafię jego przekształcić na swoje potrzeby. Oto on:

  1. function csv_in_array($url,$delm=";",$encl="\"",$head=false) {
  2.  
  3. $csvxrow = file($url);
  4.  
  5. $csvxrow[0] = chop($csvxrow[0]);
  6. $csvxrow[0] = str_replace($encl,'',$csvxrow[0]);
  7. $keydata = explode($delm,$csvxrow[0]);
  8. $keynumb = count($keydata);
  9.  
  10. if ($head === true) {
  11. $anzdata = count($csvxrow);
  12. $z=0;
  13. for($x=1; $x<$anzdata; $x++) {
  14. $csvxrow[$x] = chop($csvxrow[$x]);
  15. $csvxrow[$x] = str_replace($encl,'',$csvxrow[$x]);
  16. $csv_data[$x] = explode($delm,$csvxrow[$x]);
  17. $i=0;
  18. foreach($keydata as $key) {
  19. $out[$z][$key] = $csv_data[$x][$i];
  20. $i++;
  21. }
  22. $z++;
  23. }
  24. }
  25. return $out;
  26. }
  27.  
  28. $csvdata = csv_in_array( "woda.txt", "*", "\"", true );
  29.  
  30. echo "<pre>\r\n";
  31. print_r($csvdata);
  32. echo "</pre>\r\n";


Skrypt bierze mi pierwszy wiersz z pliku i umieszcza jako tytuły wszystkich wierszy w tablicy...
Array
(
[0] => Array (
[001;"tekst"] => "tekst"
[001;"tekst"] => "tekst"
[001;"tekst"] => "tekst"

Chciałbym sprowadzić te tablice z pliku do jednej tablicy, która w sobie będzie zawierała te tablice od razu z podziałem na kolumny:
Array
(
[0] => Array (
[001] => "tekst"
[002] => "tekst"
[003] => "tekst"
)
[1] => Array (
[001] => "tekst2"
...

Bardzo prosiłbym Was drodzy użytkownicy o pomoc. Dziękuję i pozdrawiam,
Jarek.
gr56
  1. function parseCSV($file)
  2. {
  3. $lines = file($file);
  4. $output = array();
  5. $i = 0;
  6. foreach($lines as $line)
  7. {
  8. $line = trim($line);
  9. if($line == "999")
  10. {
  11. $i++;
  12. }
  13. else
  14. {
  15. $ex = explode(";", $line);
  16. $output[$i][$ex[0]] = str_replace("\"", "", $ex[1]);
  17. }
  18. }
  19. return $output;
  20. }
jaroo88
@gr56, a co w przypadku gdy wystąpi więcej niż jeden taki sam index? Np.

...
"120";"sadsad"
"120";"gffdgfdg"
...

Dzięki Twojemu skryptowi uzyskuję zamierzony efekt, ale pomija mi takie same indexy.
Jak zrobić, aby skrypt w przypadku gdy występują takie same indexy tworzył wewnętrzną bazę?

PS. Dziękuję za pomoc i za Twój skrypt, bardzo mi pomogłeś!
gr56
  1. function parseCSV($file)
  2. {
  3. $lines = file($file);
  4. $output = array();
  5. $i = 0;
  6. foreach($lines as $line)
  7. {
  8. $line = trim($line);
  9. if($line == "999")
  10. {
  11. $i++;
  12. }
  13. else
  14. {
  15. $ex = explode(";", $line);
  16. $val = str_replace("\"", "", $ex[1]);
  17. if(isset($output[$i][$ex[0]]))
  18. {
  19. if(is_array($output[$i][$ex[0]]))
  20. {
  21. $output[$i][$ex[0]][] = $val;
  22. }
  23. else
  24. {
  25. $output[$i][$ex[0]] = array($output[$i][$ex[0]], $val);
  26. }
  27. }
  28. else
  29. {
  30. $output[$i][$ex[0]] = $val;
  31. }
  32. }
  33. }
  34. return $output;
  35. }
jaroo88
@gr56 bardzo Ci dziękuję... Naprawdę bardzo.

Nie wiem czy wypada mi prosić Cię o coś więcej. Chciałbym również tą tablicę zapisać do bazy.
Każda tablica to osobna wiersz, a każdy index to osobna kolumna (etykiety kolumn w bazie są takie same jak indexy w tablicy <001, 002, itp.>).
W przypadku, gdy (np. te pole 120) tablica zawiera w sobie tablicę - wartości w komórce są wypisywane jedno pod drugim.

Trochę mi wstyd dalej prosić Cię o pomoc, ale byłbym bardzo wdzięczny...
Dziękuję z góry i pozdrawiam,
Jarek.
jaroo88
@gr56 ponawiam prośbę... Byłbym bardzo wdzięczny... wstydnis.gif
jaroo88
Pomoże mi ktoś z zapisem takiej tabeli do bazy danych? Proszę... Z góry dziękuję za każdą wskazówkę!
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.