Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pętla wyświetla nie wszystkie powtórzenia
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Pomóżcie bo zaraz w głowę dostanę...
Mam taki oto plik:
Kod
0,0;1,3;0,0;2,2;4,4;0,0!
1,1;3,3;0,1!
2,2;2,2;1,1

Jak widać, są to 3 linijki, każda ma po kilka par cyfr. Cyfry oddzielone od siebie przecinkiem a pary średnikiem. Linijki oddzielone od siebie wykrzyknikiem.

Ten plik ładuję do zmiennej $cells_from_file

Następnie rozdzielam za pomocą explode i foreach na części pierwsze. Te cyfry to numery w tablicy $xlsx_file. Czyli dla przykładu pierwsza para, tj 0,0 oznacza nic innego jak $xlsx_file[0][0], para 1,3 oznacza $xlsx_file[1][3] itd.

Zawartość każdej linijki ma pójść do odzielnego pliku. Trzy linijki czyli 3 pliki.

Wszystko świetnie działa, oprócz tego że dla pierwszego pliku ładnie wrzuca 6 wartości, bo jest 6 par oddzielonych średnikiem a dla każdego kolejnego powtórzenia pętli (każdego kolejnego pliku) nie wrzuca wartości pierwszej pary, czyli 1,1 oraz 2,2 są pominięte. Kwaaa czemu?!

Pierwszy explode rozbija na oddzielne linijki, dzieląc po wykrzykniku. Następnie kolejny explode w pętli dla każdej linijki rozbija wg średnika. Koljeny wg przecinka. Następnie składana jest zmienna $a która będzie koordynatami w tablicy $xlsx_file, z której to dane wrzucane są do $cells_small i odzielane od siebie podwójnym równa się. I to wędruje do pliku 1.txt, potem 2.txt i tak dalej tyle razy ile linijek w pliku z cyframi.
  1. $seperate_files=explode('!',$cells_from_file);
  2. $i=1;
  3. $k=0;
  4. foreach($seperate_files as $sf){
  5. $cells_small='';
  6. $seperate_cells=explode(';',$sf);
  7. foreach($seperate_cells as $sc){
  8. $seperate_colls=explode(',',$sc);
  9. $j=0;
  10. $a='';
  11. $a=array();
  12. foreach($seperate_colls as $so){
  13. $a[$j]=$so;
  14. $j++;
  15. }
  16.  
  17. $cells_small.=$xlsx_file[$a[0]][$a[1]];
  18. $cells_small.='==';
  19. echo " K:$k --- "; $k++;
  20. echo " cells small: $cells_small <br >";
  21. }
  22. echo "plik: $cells_small <br>";
  23. file_put_contents("uploads/$i.txt",$cells_small);
  24. $i++;
  25. }


Dzięki z góry.
nospor
O matko
$j=0;
$a='';
$a=array();
foreach($seperate_colls as $so){
$a[$j]=$so;
$j++;
}
$first=$a[0];
$second=$a[1];

powaznie?

A czemu pooprostu nie:
$first=$seperate_colls[0];
$second=$seperate_colls[1];
?

A najlepiej
$first=(int)$seperate_colls[0];
$second=(int)$seperate_colls[1];

Bo pewnie tam jeszcze jakies smieci siedza. A najlepiej na przyszlosc uzywaj var_dump na wszystkim czego uzywasz to unikniesz takich niespodzianek
sadistic_son
No dobra, rzeczywiście to było niepotrzebne. Zrobiłem jak piszesz. Ale to nie rozwiązuje problemu sad.gif

  1. $seperate_files=explode('!',$cells_from_file);
  2. $i=1;
  3. $k=0;
  4. foreach($seperate_files as $sf){
  5. $cells_small='';
  6. $seperate_cells=explode(';',$sf);
  7. foreach($seperate_cells as $sc){
  8. $seperate_colls=explode(',',$sc);
  9. $first=$seperate_colls[0];
  10. $second=$seperate_colls[1];
  11. $cells_small.=$xlsx_file[$first][$second];
  12. $cells_small.='==';
  13. echo " K:$k --- "; $k++;
  14. echo " cells small: $cells_small <br >";
  15. }
  16. echo "plik: $cells_small <br>";
  17. file_put_contents("uploads/$i.txt",$cells_small);
  18. $i++;
  19. }



EDIT:

ok, to rozwiązuje problem biggrin.gif
  1. $first=(int)$seperate_colls[0];
  2. $second=(int)$seperate_colls[1];

Ale dlaczego? Nie rozumiem. Proszę o wyjaśnienie.
nospor
Najzwyklej w swiecie masz tam biale znaki, chocby \r \n

Dlatego uzywaj zawsze VAR_DUMP zamiast z byle pierda latac na forum wink.gif

I pamietaj, "!" nie sluzy do odzielania lini, tylko wlasnie znak nowej lini \r\n wink.gif
viking
I poza tym po co te wykrzykniki na końcu? Bierzesz file() z odpowiendnimi flagami i od razu masz w tablicy co trzeba.
sadistic_son
Aaa, no tak, zkani nowej lini były w zmiennej. Racja. Dzięki!
A dzielę po wykrzyknikach dlatego, że plik czasem będzie miał więcej niż jeden wykrzyknik na końcu to wtedy dla każdego wykrzyknika ponad jeden ma też utworzyć plik.
nospor
Cytat
że plik czasem będzie miał więcej niż jeden wykrzyknik na końcu to wtedy dla każdego wykrzyknika ponad jeden ma też utworzyć plik.

Rownie dobrze zamiast wykrzyknika moze byc poprostu kolejna pusta linia .Wydaje sie bardziej czytelne niz jakies wykrzykniki wink.gif
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.