Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Rekurencyjna modyfikacja tabeli
tua1
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 23.10.2009

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


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

Ten post edytował tua1 25.01.2010, 12:22:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
tvister
post
Post #2





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


Tak na oko to getActiveNodes() powinno zwracać referencje.


--------------------
Kto rano wstaje ten leje jak z cebra.
Go to the top of the page
+Quote Post
tua1
post
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 23.10.2009

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


no tak zwraca $this->activeNodes
Go to the top of the page
+Quote Post
tvister
post
Post #4





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


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())


--------------------
Kto rano wstaje ten leje jak z cebra.
Go to the top of the page
+Quote Post
tua1
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 23.10.2009

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


dzięki o to chodziło.
Jest trochę namotana z tym tematem w php, oby php 6 to zmieniło.
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: 19.08.2025 - 16:12