Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] normowanie kluczy w tablicy asocjacyjnej, zagnieżdzonej
Forum PHP.pl > Forum > Przedszkole
Esper
Witam,
mam taki problem, potrzebuje tak przbudować dowolną tablicę, by wszystkie klucze były pisane małymi literami, a jednocześnie nie zgubić żadnej z wartości. Czyli np tablicę:
  1. $t[1]='1.';
  2. $t[A]='A.';
  3. $t[a]='a.';
  4. $t[B]='B.';

przerobić na
  1. $t[1]='1.';
  2. $t[b]='B.';
  3. $t[2][a]='a.';
  4. $t[3][a]='A.';

Bawię się w to już kilka dni (jestem mocno początkującym), i nic nie potrafię stworzyć. Tzn. funkcje, które robią to częściowo owszem, jednak by całość przebiegła od początku do końca - nie ma szans. Starałem się pisać za pomocą podstawowych funkcji. Poniższy przykład moich wypocin w ogóle nie porusza tematu rekurencji dla tablic zagnieżdzonych.
  1. function rekur($wejscie)
  2. {
  3. $zwrotna=array();
  4.  
  5. foreach($wejscie as $k=>$v)
  6. {
  7. if(is_numeric($k))
  8. {
  9. $zwrotna[$k]=$v;
  10. unset($wejscie[$k]);
  11. }
  12. }
  13.  
  14. foreach($wejscie as $k=>$v)
  15. {
  16. $tym=array();
  17. $tym[$k]=$v;
  18.  
  19. foreach($wejscie as $k2=>$v2)
  20. {
  21. if(mb_strtolower($k2)==mb_strtolower($k))
  22. {
  23. $tym[$k2]=$v2;
  24. }
  25. }
  26.  
  27. if(count($tym)>=2)
  28. {
  29. foreach($tym as $k3=>$v3)
  30. {
  31. $zwrotna[][mb_strtolower($k3)]=$v3;
  32. unset($wejscie[$k3]);
  33. }
  34. }
  35.  
  36. elseif(count($tym)==1)
  37. {
  38. $zwrotna[mb_strtolower($k3)]=$v3;
  39. unset($wejscie[$k3]);
  40. }
  41. unset($tym);
  42. }
  43.  
  44. return $zwrotna;
  45. }

Możecie coś pomóc/poradzić/podpowiedzieć?
Damonsson
Hmmm, ja bym użył http://pl1.php.net/manual/pl/function.arra...ge-key-case.php o ile dobrze zrozumiałem co chcesz osiągnąć, choć dziwna ta Twoja wynikowa tablica.
Esper
Dzięki, zapewne coś tam znajdę(w jednej z funkcji poniżej). Bo problemem jest oczywiście ryzyko nadpisania wartości gdy nazwy po normalizacji będą takie same.

Tak moja funkcja jest dziwna, problem w tym, że pierwszy foreach leci po wszystkich wartościach tablicy wejściowej - choć chciałbym aby omijał te klucze, które wew kolejnych foreachy usuwam - nie potrafię tego jednak zrobić :/
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.