Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja każdego elementu drzewiastej tablicy o n liściach.
Forum PHP.pl > Forum > PHP
Sajrox
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
sticker
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.
Sajrox
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
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.