Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z foreach
Forum PHP.pl > Forum > Przedszkole
fate
  1. foreach ($dane as $value){$value = substr($value,-18);}
  2. $fuck = substr($dane[0],-18);
  3. echo $fuck;
  4. var_dump($dane);


dlaczego zmienna $fuck wyswietla mi ostatnie 18 znakow a $dane wyswietla sie w calosci bez zmian !
Nie wiem co przeoczylem probowalem uzywac innych funkcji array_map, substr, lub dodac settype ale chyba o czyms nie wiem.

Moglbym niby dac petle for i zwiekszac wartosc w [] i to bedzie tymczasowe rozwiazanie ale nie wierze ze sie nie da inaczej

POMOCY
zielu001
A co chcesz osiągnąć?
thek
To zobacz co robi funkcja substr i jak działa var_dump... Inna sprawa, że dla pętli foreach $dane to tylko ich kopia(!), więc jeśli chcesz zmieniać zawartość elementów tej tablicy to powinieneś pracować na referencji lub jawnie modyfikować te dane. Zmienna $value jest tylko lokalna i w każdym kroku powstaje na nowo. Poza tym jeśli używałeś array_map to pewnie chciałeś działać na elementach... tyle ze znając życie myślałeś, iż od razu Ci pozmienia. Lepiej użyj array_walk wink.gif
fate
  1. foreach ($wartosci as $klucz => $ilerazy)
  2. {echo 'Dnia '.$klucz.' odnotowano '.$ilerazy.' wizyt.<br />';}


wie ktos dlaczego $klucz i $ilerazy wyswietla sie pod sabą?
zrobilem to w tabeli zeby rozwiazac problem ale chcialbym bez tabeli.. o czym nie wiem? nerdsmiley.png

moze ktos przeczyta..
s1518
hmm - mozesz wytlumaczyc jeszcze raz problem? Na razie zrozumialem to tak, ze pytasz dlaczego petla foreach wyswietla wartosci tablicy jeden pod drugim - w Twoim przypadku wyswietla to tak bo masz pdo koniec ciagu <br />
fate
uzylylem wpierw funkcji array_count_alues
ar_dump wartosci:

  1. array(26) { ["2012-11-24
  2. "]=> int(1) ["2012-11-02
  3. "]=> int(1) ["2012-11-03
  4. "]=> int(1) ["2012-11-04
  5. "]=> int(1) ["2012-11-11
  6. "]=> int(1) ["2012-11-05
  7. "]=> int(1) ["2012-11-08
  8. "]=> int(1) ["2012-11-09
  9. "]=> int(1) ["2012-11-10
  10. "]=> int(1) ["2012-11-15
  11. "]=> int(1) ["2012-11-12
  12. "]=> int(1) ["2012-11-13
  13. "]=> int(1) ["2012-11-30
  14. "]=> int(1) ["2012-12-01
  15. "]=> int(1) ["2012-12-02
  16. "]=> int(1) ["2012-11-16
  17. "]=> int(1) ["2012-11-18
  18. "]=> int(1) ["2012-11-20
  19. "]=> int(1) ["2012-11-26
  20. "]=> int(1) ["2012-11-27
  21. "]=> int(1) ["2012-11-28
  22. "]=> int(1) ["2012-11-29
  23. "]=> int(1) ["2012-12-04
  24. "]=> int(1) ["2012-12-05
  25. "]=> int(1) ["2012-12-07
  26. "]=> int(1) ["2012-12-08
  27. "]=> int(1) }


wlasnie problem jest taki jakby pomiedzy tymi zmiennymi byl znak konca linii (przedziela mi wyrazenie na pol)

jak na to popatrze to znak konca lini mi dorabia po walue i przenosi "]=> klucz ponizej nie wiem czemu i tam nie robi nowej linii tylko nowy element sie zaczyna.. tak ms dzialac array count waules?
php.5.2
thek
Możliwe, że masz tam niewidoczny normalnie znak przejścia do nowej linii. O ile w kodzie <br> służy do tego, to istnieją także znaki końca linii pokroju "\n" więc dla pewności na kluczach zrób sobie nl2br by wykryć czy są one tam faktycznie, bo wtedy Ci się "ujawnią". By się ich pozbyć zastosuj czyszczenie białych znaków poprzez trimowanie.
irmidjusz
może te wartości użyte do skonstruowania kluczy tablicy mają na końcu znak nowej linii (lub <br />)
fate
wlasnie byl robiony rtrim, o nl2br zapomnialem, teraz to dorzucilem + nl2br .. hmm zajrzyjcie w calosc moze cos ogarniecie, moze cos nie tak. Nie posluchalem sie z tym array_walkiem ale chyba to nie przyczyna problemu hm. Obcinam 16 znakow a data ma teoretycznie 10 tyle że dwa razy "-" w UTF-8 wychodzi ze ma po 4 znaki chyba ze ma po trzy i rzeczywiscie siedzi tam \n ale wtedy trim powinien zadzialac,

dodam ze darte tworzy funkcja dat , jezeli chodzi o znak ' - ' to w utf-8 odpowiednikiem jest - czyli 5 znaków, dziwne! wtf? anybody?

  1.  
  2. //$policzto = count($dane);
  3. $dane = file($log,FILE_SKIP_EMPTY_LINES);
  4. $dane = array_map("rtrim",$dane);
  5. function nl2brsubstr($sub){$sub=trim(nl2br(substr($sub,-16))); return($sub);}
  6. $dane=array_map("nl2brsubstr",$dane);
  7. $wartosci=array_count_values($dane);
  8. //var_dump($dane);
  9. //array_walk
  10. // ($a=0; $a=$ilemozna; $a++)
  11. //var_dump($wartosci);
  12.  
  13. foreach ($wartosci as $klucz => $ilerazy)
  14. {echo 'Dnia '.$klucz.' odnotowano '.$ilerazy.' wizyt.<br />';}


..niestety

Daje efekt:
Dnia 2012-11-24
odnotowano 1 wizyt.
Dnia 2012-11-02
odnotowano 1 wizyt.
Dnia 2012-11-03
odnotowano 1 wizyt.
Dnia 2012-11-04
odnotowano 1 wizyt.
Dnia 2012-11-11
odnotowano 1 wizyt.
Dnia 2012-11-05
odnotowano 1 wizyt.
Dnia 2012-11-08
odnotowano 1 wizyt.
Dnia 2012-11-09
odnotowano 1 wizyt.
Dnia 2012-11-10
odnotowano 1 wizyt.
Dnia 2012-11-15
odnotowano 1 wizyt.
Dnia 2012-11-12
odnotowano 1 wizyt.
Dnia 2012-11-13
odnotowano 1 wizyt.

..itd (localhost)

dobra juz ogarniete.
trzeba bylo ucinac 10 znakow od pozycji -16 gdyz osttanie 6 to <br /> nie wiem dlaczego nie widac tego na princie w sensie War dumpie, pewnie to trzeba zapamietac bo tak ma byc.
Sorki ale \/ mi nie dziala na klawie.
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.