Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Listowanie do CSV
winiar789
post 20.11.2017, 10:59:10
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


Dzień dobry,

mam pewien problem i nie wiem jak sobie z nim poradzić, mianowicie mam forach do którego wpisuje do CSV:
  1. foreach .... {
  2.  
  3. fwrite($hd, "$v['indeks']");
  4.  
  5. }


tabelka w csv:

AA/BB/1
AA/BB/2
AA/BB/3

Jednak przed wpisami muszę dodać indeks podstawowy aby uzyskać taki efekt:

AA/BB
AA/BB/1
AA/BB/2
AA/BB/3

rozbiłem sobie wartość INDEKS za pomocą explode:

  1. $in1 = explode('/',$v['indeks']);
  2. $in_ok = $in1[0].'/'.$in1[1];


Jednak gdy dodałem do pętli:

  1. foreach .... {
  2.  
  3. if($in_ok) {
  4. fwrite($hd, "$v['indeks']");
  5. }
  6.  
  7. fwrite($hd, "$v['id']","$v['indeks']");
  8.  
  9. }


Mam coś takiego:

AA/BB
AA/BB/1
AA/BB
AA/BB/2
AA/BB
AA/BB/3

Nie wiem jak to rozbić żeby było tylko w pierwszej wartości ... Proszę o pomoc
Go to the top of the page
+Quote Post
trueblue
post 20.11.2017, 11:07:42
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


1. Przed pętlą ustaw zmienną X z indeksem podstawowym na pustą.
2. W pętli dla elementu znajdź indeks podstawowy.
2a. Jeśli znaleziony indeks podstawowy jest inny od tego w zmiennej X, to zapisz go do pliku i do zmiennej X.
2b. Jeśli nie, to przejdź do następnego kroku.
3. Zapisz indeks.


--------------------
Go to the top of the page
+Quote Post
winiar789
post 20.11.2017, 11:10:58
Post #3





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


Podałbyś mi przykład - tak byłoby mi najlepiej to zrozumieć.
Go to the top of the page
+Quote Post
trueblue
post 20.11.2017, 11:30:38
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Pętlę masz.
Przed pętlą zrób to co w kroku 1.
W środku pętli przed zapisem indeksu zrób, to co w krokach 2/2a/2b + 3.
Większość masz już zrobioną. Wystarczy dodać if oraz ustawić zmienną przed pętlą, a to chyba umiesz.


--------------------
Go to the top of the page
+Quote Post
winiar789
post 15.12.2017, 11:29:36
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


chyba się udało - dziękuje exclamation.gif!
biggrin.gif

Musze wrócić do tego tematu - udało mi się wylistowąć z godnie z podpowiedzią.

tzn:

produkt podstawoy XXX/AAA
produkt configure XXX/AAA/1
produkt configure XXX/AAA/2
produkt configure XXX/AAA/3

problem polega w tym ze to nie jest dobrze bo musze dodac podstawowy na dole tzn tak:

produkt configure XXX/AAA/1
produkt configure XXX/AAA/2
produkt configure XXX/AAA/3
produkt podstawoy XXX/AAA

Jak mogę to zamienić ? ?

Go to the top of the page
+Quote Post
nospor
post 15.12.2017, 11:57:27
Post #6





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




pokaz aktualny kod co masz


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

"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
trueblue
post 15.12.2017, 11:58:23
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


To wstawiaj go na listę wtedy kiedy zmienia się indeks lub nie ma więcej pozycji.


--------------------
Go to the top of the page
+Quote Post
winiar789
post 15.12.2017, 12:39:33
Post #8





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


Czekaj bo nie kumam

mam tak:
  1.  
  2. $indeks_podstawowy = "";
  3. foreach (...) {
  4.  
  5.  
  6. if($kod_xx!=$indeks_podstawowy) {
  7.  
  8. WPISUJ PODSTAWOY
  9.  
  10. $indeks_podstawowy=$kod_xx;
  11.  
  12. } else {
  13.  
  14. WPISZ RESZTE
  15.  
  16.  
  17. $indeks_podstawowy=$kod_xx;
  18.  
  19. }
  20.  
  21.  
  22. }
Go to the top of the page
+Quote Post
trueblue
post 15.12.2017, 13:00:04
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Sprawdź w warunku czy to pierwszy rekord, jeśli nie to wypisz.
Albo ustaw przed pętlą zmienną $indeks_podstawowy na pierwszy indeks.


--------------------
Go to the top of the page
+Quote Post
winiar789
post 15.12.2017, 13:20:18
Post #10





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


nie wiem nie radze sobie z tym wacko.gif

Dałem coś takiego

  1.  
  2.  
  3. $kod_xx = $row['indeks'];
  4.  
  5.  
  6.  
  7.  
  8. if($kod_xx==$indeks_pod2) {
  9.  
  10. //WPISZ CALOSC
  11.  
  12. $indeks_pod2=$kod_xx;
  13. }
  14.  
  15. $indeks_pod2 = $kod_xx;
  16.  
  17. if($kod_xx!=$indeks_pod2) {
  18.  
  19. //WPISZ PODSTAWOWY
  20.  
  21. }
  22.  
  23.  
Go to the top of the page
+Quote Post
trueblue
post 15.12.2017, 13:30:31
Post #11





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Zapamiętaj indeks podstawowy i wypisz go w pętli dopiero przy zmianie indeksu.


--------------------
Go to the top of the page
+Quote Post
winiar789
post 15.12.2017, 15:36:42
Post #12





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


A czy pokazałbyś mi przykład ?

Ktoś pomoże ?

Kurna : Zapamiętaj indeks podstawowy i wypisz go w pętli dopiero przy zmianie indeksu.

mam pętle
  1. while {
  2.  
  3. if($kod_towaru_sklep1!=$indeks_podstawowy) {
  4.  
  5. //WPISZ POJEDYNCZY
  6.  
  7. $indeks_podstawowy=$kod_towaru_sklep1;
  8. } else {
  9.  
  10.  
  11. //WYPISZ WSZYSTKIE
  12.  
  13.  
  14. $indeks_podstawowy=$kod_towaru_sklep1;
  15. }
  16.  
  17.  
  18.  
  19. }



Czyli poprzednie rozwiązanie nie wchodzi w grę bo wypisuje indeks na gorze. Wiec w waszych odpowiedziach wynika iz zapamietaj indeks.
Co znaczy zapamietaj indeks do zmiennej do sesji ?


wiec jezeli tak to mysle ze do zmiennej




  1. while {
  2.  
  3.  
  4.  
  5.  
  6. //WYPISZ WSZYSTKIE
  7.  
  8.  
  9. $indeks_podstawowy=$kod_towaru_sklep1;
  10.  
  11.  
  12.  
  13.  
  14. }


Jest zapisany ?

Go to the top of the page
+Quote Post
trueblue
post 15.12.2017, 16:00:42
Post #13





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


  1. header('Content-Type:text/plain');
  2.  
  3. $array = ['AA/BB/1', 'AA/BB/2', 'AA/BB/3', 'CC/DD/10', 'CC/DD/20', 'CC/DD/30'];
  4.  
  5. $prevIndex = '';
  6. foreach($array as $number => $element){
  7. $baseIndex = substr($element, 0, strrpos($element, '/'));
  8. if($baseIndex !== $prevIndex){
  9. if($number > 0){
  10. echo substr($array[$number - 1], 0, strrpos($array[$number - 1], '/')).PHP_EOL;
  11. }
  12. $prevIndex = $baseIndex;
  13. }
  14. echo $element.PHP_EOL;
  15. }
  16. echo $baseIndex.PHP_EOL;


Ten post edytował trueblue 15.12.2017, 16:01:43


--------------------
Go to the top of the page
+Quote Post
winiar789
post 16.12.2017, 00:04:11
Post #14





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 15.11.2011

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


Uffff - fakt musiałem przepisać dużo rzeczy aby zaimplementować ten kod ale udało się exclamation.gif!!!!!!!!!! biggrin.gif jesteś wielki
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: 27.04.2024 - 01:08