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
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.
$i=1; $k=0; foreach($seperate_files as $sf){ $cells_small=''; foreach($seperate_cells as $sc){ $j=0; $a=''; foreach($seperate_colls as $so){ $a[$j]=$so; $j++; } $cells_small.=$xlsx_file[$a[0]][$a[1]]; $cells_small.='=='; } file_put_contents("uploads/$i.txt",$cells_small); $i++; }
Dzięki z góry.