Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Walidacja każdego elementu drzewiastej tablicy o n liściach., Aby na wyjściu otrzymac taką samą strukturę tabl. o innych wartosciach
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Witam,
Od jakiegoś czasu zmagam się z następującym probleme.
Chciałbym przefiltrować każdą wartość w tablicy o n liściach i na wyjściu otrzymać trablice o identycznej strukturze z przefiltrowanymi wartościami. Przykład:

Tablica na wejściu:
  1. <?php
  2. (
  3. [0] => wartosc1
  4. [1] => wartosc2
  5. [2] => Array
  6. (
  7. [0] => wartosc3
  8. [2] => Array
  9. (
  10. [0] => wartosc5
  11. [1] => wartosc6
  12. )
  13.  
  14. )
  15.  
  16. )
  17. ?>

I na wyjściu chciałbym otrzymać tablice np taką:
  1. <?php
  2. (
  3. [0] => wartosc1_other
  4. [1] => wartosc2_other
  5. [2] => Array
  6. (
  7. [0] => wartosc3_other 
  8. [2] => Array
  9. (
  10. [0] => wartosc5_other
  11. [1] => wartosc6_other
  12. )
  13.  
  14. )
  15. )
  16. ?>

Próbowałem zrobić to przez rekurencję ale wtedy otrzymuje tablicę jednowymiarową z wszystkimi wartosciami a potrzebuje otrzymać tablice o takiej samej strukturze jak ta na wejściu.

Oto funcja która wyciąga wszystkiee wartosc ale jako tablicę i jednym poziomie
  1. <?php
  2. function treeFilter($array)
  3. {
  4. static $array_new;
  5.  
  6. foreach ($array as $element) {
  7. if (is_array($element))
  8. treeFilter($element);
  9. else
  10. $array_new[] = $element.'_other';
  11. }
  12.  
  13. return $array_new;
  14. }
  15. ?>


Otrzumyje
  1. <?php
  2. (
  3. [0] => wartosc1_other
  4. [1] => wartosc2_other
  5. [2] => wartosc3_other
  6. [3] => wartosc5_other
  7. [4] => wartosc6_other
  8. )
  9. ?>



Jeśli ktoś ma już na to jakiś sposób jak na wyjściu otrzymacć tabliće o takiej samej strukturze jak na wejściu to proszę o pomoc. Myśle że każdemu to się przyda winksmiley.jpg

Ten post edytował Sajrox 6.02.2008, 12:18:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


no ten kod który pokazałeś to rekurencją nie jest smile.gif Ale masz nosa bo w ten sposób przetwarza sie drzewa wiec dobry trop. (poza tym z tą statyczną tablica w funkcji to przegiąłes ;] )



  1. <?php
  2. foreach ($array as $element) {
  3. if (is_array($element))
  4. ttt($element);
  5. else
  6. $array_new[] = $element.'_other';
  7. }
  8. ?>


ttt na treeFilter i pokazać jakieś miejsce w ktore ma wrócić przetworzona w rekurencyjnym wywołaniu tablica czyli tak jak to zrobiłes poniżej.


--------------------
Go to the top of the page
+Quote Post
Sajrox
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


ups mały bląd, już naprawione po prostu wczesnije na szybkiego nazwałem funkcje ttt a potem zapomnialem zmienic na treeFilter :/
Teraz już jets ok smile.gif
Ale nadal nie mam rozwiązania sad.gif

PS: Już mam rozwiązanie smile.gif
Oto ta funkcja.

  1. <?php
  2. function filter($array)
  3. {
  4. foreach($array as &$v)
  5. {
  6. if(is_array($v))
  7. $v = filter($v);
  8. else
  9. $v = $v;
  10. }
  11. return $array;
  12. }
  13. ?>


Mam nadzieję że komuś się przyda winksmiley.jpg

Ten post edytował Sajrox 6.02.2008, 12:45:09
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 Aktualny czas: 20.08.2025 - 12:39