Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parsowanie tekstu, który może być tablicą, bez użycia funkcji
Forum PHP.pl > Forum > PHP
Sebusik
Witajcie 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ć 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 smile.gif

Pozdrawiam.
erix
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.
Sebusik
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 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 smile.gif
erix
array_walk_recursive
Sebusik
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 wink.gif
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.