Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z foreach, i z array_map
fate
post 7.12.2012, 21:18:24
Post #1





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


  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


--------------------
Go to the top of the page
+Quote Post
zielu001
post 7.12.2012, 21:25:14
Post #2





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 15.08.2009

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


A co chcesz osiągnąć?


--------------------
"Zło do triumfu potrzebuje tylko tego, aby dobrzy ludzie nic nie robili"
Go to the top of the page
+Quote Post
thek
post 7.12.2012, 22:32:23
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
fate
post 8.12.2012, 21:51:25
Post #4





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


  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..


--------------------
Go to the top of the page
+Quote Post
s1518
post 8.12.2012, 22:16:48
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 4
Dołączył: 3.12.2012

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


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 />
Go to the top of the page
+Quote Post
fate
post 8.12.2012, 23:54:11
Post #6





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


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


--------------------
Go to the top of the page
+Quote Post
thek
post 9.12.2012, 00:11:20
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
irmidjusz
post 9.12.2012, 00:11:45
Post #8





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


może te wartości użyte do skonstruowania kluczy tablicy mają na końcu znak nowej linii (lub <br />)


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
fate
post 9.12.2012, 08:31:08
Post #9





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


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.


--------------------
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: 23.04.2024 - 13:42