Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Listowanie do CSV
Forum PHP.pl > Forum > PHP
winiar789
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
trueblue
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.
winiar789
Podałbyś mi przykład - tak byłoby mi najlepiej to zrozumieć.
trueblue
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.
winiar789
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ć ? ?

nospor
pokaz aktualny kod co masz
trueblue
To wstawiaj go na listę wtedy kiedy zmienia się indeks lub nie ma więcej pozycji.
winiar789
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. }
trueblue
Sprawdź w warunku czy to pierwszy rekord, jeśli nie to wypisz.
Albo ustaw przed pętlą zmienną $indeks_podstawowy na pierwszy indeks.
winiar789
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.  
trueblue
Zapamiętaj indeks podstawowy i wypisz go w pętli dopiero przy zmianie indeksu.
winiar789
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 ?

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