Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Parsowanie tekstu, który może być tablicą, bez użycia funkcji
Sebusik
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 29.01.2011

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


Witajcie (IMG:style_emoticons/default/wink.gif)

Być może tytuł niewiele mówi, jednak zupełnie nie wiem, jak określić mój problem.

Posłużę się przykładem zmiennej $_GET. Jest to tablica, w której są wartości, ale te wartości mogą być również tablicą. I jak takie coś sparsować? Posłużę się przykładem:
  1. foreach($_GET as $name => $value)
  2. {
  3. $value = trim($value);
  4. {
  5. $value = stripslashes($value);
  6. }
  7.  
  8. $jakas_zmienna[$name] = $value;
  9. }


Teraz problemu nie ma, bo wartości (w założeniu) nie przyjmują tablicy. Jednak, gdyby wartość była tablicą... To już nie znam za bardzo dobrego sposobu, jak się zabrać za parsowanie tego.
Sposoby znam 2, jednak żaden mi nie odpowiada. Pierwszy, to taki, w którym kod powtarza się dwukrotnie:
  1. foreach($_GET as $name => $value)
  2. {
  3. if(is_array($value))
  4. {
  5. foreach($value as $subname => $subvalue)
  6. {
  7. $subvalue = trim($subvalue);
  8. {
  9. $subvalue = stripslashes($subvalue);
  10. }
  11.  
  12. $value[$subname] = $subvalue;
  13. }
  14. }
  15. else
  16. {
  17. $value = trim($value);
  18. {
  19. $value = stripslashes($value);
  20. }
  21. }
  22.  
  23. $jakas_zmienna[$name] = $value;
  24. }


Rozwiązanie, którego od środka nie potrafię zaakceptować (IMG:style_emoticons/default/smile.gif)
Drugie to takie, z zastosowaniem funkcji:
  1. function parser($data)
  2. {
  3. if(is_array($data))
  4. {
  5. foreach($data as $name => $value)
  6. {
  7. $data[$name] = parser($value);
  8. }
  9.  
  10. return $data;
  11. }
  12.  
  13. $data = trim($data);
  14. {
  15. $data = stripslashes($data);
  16. }
  17.  
  18. return $data;
  19. }
  20.  
  21. $jakas_zmienna = parser($_GET);


Jednak tworzenie funkcji też za bardzo nie jest mi na rękę.
I tutaj pytanie. Czy wpadł ktoś kiedyś na pomysł, jak rozwiązać powyższy problem z wartościami, które mogą być tablicą, bez stosowania dwa razy tego samego kodu, oraz bez stosowania funkcji? Jeżeli ktoś się podzieli tą wiedzą będę bardzo wdzięczny (IMG:style_emoticons/default/smile.gif)

Pozdrawiam.
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przecież one przychodzą już sparsowane...?

Poza tym, dlaczego męczysz się z reliktem przeszłości, jakim są magic_quotes? W PHP 5.4 już to nawet wywalili.
Go to the top of the page
+Quote Post
Sebusik
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 29.01.2011

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


Cytat(erix @ 27.07.2012, 13:13:14 ) *
Poza tym, dlaczego męczysz się z reliktem przeszłości, jakim są magic_quotes? W PHP 5.4 już to nawet wywalili.


O tym nie wiedziałem, dzięki (IMG:style_emoticons/default/biggrin.gif)


Cytat(erix @ 27.07.2012, 13:13:14 ) *
Przecież one przychodzą już sparsowane...?

Hmm? Nie za bardzo rozumiem co masz na myśli, poza tym dałem przykład, bo stosuję więcej parsowania dla zmiennych $_GET i $_POST (np. niektóre filtruję funkcją intval).

Może trochę niejasno wytłumaczyłem, ale mam tablicę:

array
(
pole1 => wartosc,
pole2 => inna_wartosc,
pole3 => array
(
podpole1 => wartosc,
podpole2 => wartosc2,
podpole3 => jeszcze_inna_wartosc
),
pole4 => value
)

I chcę każde pole przefiltrować, jeżeli by to była tablica, a w niej wartości, które nie są tablicą to nie ma problemu, jednak gdy jest to tablica, w której niektóre pola mogą być tablicą, to pojawia się problem.

Ale masz pomógł za drugie zdanie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




array_walk_recursive
Go to the top of the page
+Quote Post
Sebusik
post
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 29.01.2011

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


Na razie doszedłem do tego, że funkcja parsuje do jednej tablicy. Da się jakoś zrobić, żeby stan tablic po parsowaniu był taki sam? W sumie zastanawiam się, czy nie napisać takiej funkcji ogólnej podobnej do array_map, z tym, że parsuje nawet tablicę w tablicy (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 09:26