Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]pętla wyświetla nie wszystkie powtórzenia
sadistic_son
post 6.10.2021, 15:14:56
Post #1





Grupa: Zarejestrowani
Postów: 1 468
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował sadistic_son 6.10.2021, 15:19:48


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 6.10.2021, 15:20:14
Post #2





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 6.10.2021, 15:22:50
Post #3





Grupa: Zarejestrowani
Postów: 1 468
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował sadistic_son 6.10.2021, 15:24:30


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 6.10.2021, 15:32:21
Post #4





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 6.10.2021, 15:32:57
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


I poza tym po co te wykrzykniki na końcu? Bierzesz file() z odpowiendnimi flagami i od razu masz w tablicy co trzeba.


--------------------
Go to the top of the page
+Quote Post
sadistic_son
post 6.10.2021, 15:54:31
Post #6





Grupa: Zarejestrowani
Postów: 1 468
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 6.10.2021, 16:02:51
Post #7





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 04:18