Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Rekurencyjna modyfikacja tabeli
Forum PHP.pl > Forum > Przedszkole
tua1
Witam

Kod przedstawia się tak:

wywołanie funkcji w innej:

  1. if (array_key_exists($id, $this->activeNodes)) {
  2. $this->addNodes($id, $this->getActiveNodes(), $nodes);
  3. }
  4. echo var_dump($this->getActiveNodes());


Zawartość $activeNodes nie zmienia się.

Funkcja dodawająca nową wartość:

  1. public function addNodes($id, Array & $parents, Array $nodes) {
  2.  
  3. foreach ($parents as $key => & $val) {
  4. if ($key == $id) {
  5. $val['nodes'] = $nodes;
  6. echo var_dump($val);
  7. return;
  8. }
  9. else if (is_array($val)) $this->addNodes($id, $val, $nodes);
  10. }
  11. }


Wewnątrz funkcji jest wszystko ok, niestety nie zmienia to tablicy będącej polem klasy.

Pomoże ktoś?

Pozdrawiam
tvister
Tak na oko to getActiveNodes() powinno zwracać referencje.
tua1
no tak zwraca $this->activeNodes
tvister
Mniejsza o noticy i obsługę sytuacji brzegowych.
Ten przekład powinien zobrazować to co chcesz osiągnąć.

Kod
class test {
    
     public $tabl = array('a'=>'b','x'=>'y','v'=>array('aa'=>'bb','xx'=>'yy'));
    
    
     function &zwr_tabl() {        
         return $this->tabl;
     }

     function rekur(& $tabl) {
        
         foreach($tabl as $k => &$w) {
             if ($k == 'v'){
                 $w['aa'] = 'tt';
                 return;
             } else if (is_array($w)){
                 $this->rekur($w);
             }
         }
        
        
     }
}

$test = new test();
$test->rekur($test->zwr_tabl());


print_r($test->zwr_tabl())
tua1
dzięki o to chodziło.
Jest trochę namotana z tym tematem w php, oby php 6 to zmieniło.
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.