Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odwołanie do wartości tablicy wielowymiarowej, pobranie wartości przez metodę
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Witam.
Powiedzmy że mam tablicę:
  1. <?php
  2. $arr['kwadrat']['x'] = 10;
  3. $arr['kwadrat']['y'] = 20;
  4. ?>
Zmienna znajduje się w klasie i muszę do nie się odwołać przez akcesor.
Metoda/akcesor przyjmuje dowolną ilość parametrów, które są kolejnymi nazwami pól w tablicy.
Jak mam się odwołać do pola określonego przez przekazane parametry zakładając że może ich być dowolna ilość.
Przykład:
  1. <?php
  2. class Figura {
  3. var $figury;
  4. function Figura() 
  5. {
  6. $this->figury['figura3D']['x'] = 10;
  7. $this->figury['figura3D']['y'] = 20;
  8. $this->figury['figura3D']['z'] = 15;
  9. $this->figury['inny_rodzaj_figur']['kwadrat']['dlugos_boku'] = 20;
  10. }
  11. function getValue() {
  12. $args = func_get_args();
  13. /* questionmark.gif? */
  14. }
  15. }
  16. $figura = new Figura;
  17. $figura->getValue('figura3D', 'y');
  18. $figura->getValue('inny_rodzaj_figur', 'kwadrat', 'dlugos_boku');
  19. ?>
Go to the top of the page
+Quote Post
qqrq
post
Post #2





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Może tak:

  1. <?php
  2. $figura = $this->figury;
  3.  foreach ($args as $arg)
  4. if (isset($figura[$arg]))
  5.  $figura = $figura[$arg];
  6. else
  7.  return false;
  8.  return $figura;
  9. ?>


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





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Raczej nie.
To zwróci mi tablicę a ja chcę otrzymać wartość niezależnie od stopnia zagnieżdżenia tablicy.
Wiem że można to wykonać przez rekurencję,
ale nie w smak mi wywoływanie kilkakrotnie tej samej funkcji tylko po to żeby otrzymać jakąś wartość.
Miałem nadzieję że istnieje jakaś funkcja wbudowana w PHP która mi to umożliwi.
edit>
Wybrałem trochę zakręconą metodę rozwiązania tego problemu ale działa.
(zakręconą bo nie lubię używać eval())
  1. <?php
  2. class Figura {
  3. var $figury;
  4. function Figura() {
  5. $this->figury['figura']['x'] = 10;
  6. $this->figury['figura']['y'] = 30;
  7. }
  8. function getValue()
  9. {
  10. $path = '';
  11. $args = func_get_args();
  12. foreach($args as $arr_index) {
  13. $path .= '[''.$arr_index.'']';
  14. }
  15. return eval('return $this->figury'.$path.';');
  16. }
  17. }
  18. $figura = new Figura;
  19. echo $figura->getValue('figura', 'y');
  20. ?>


Ten post edytował orglee 5.09.2007, 13:23:22
Go to the top of the page
+Quote Post
Ludvik
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Ale przecież kod, który podał qqrq jest poprawny i zwraca to, co się kryje pod daną ścieżką (jeżeli jest za krótka, to będzie to tablica, ale normalnie będzie to oczekiwana wartość...)... I nie potrzeba do tego żadnej rekurencji ani evala, bo prosta pętla for/foreach załatwia sprawę...


--------------------
Go to the top of the page
+Quote Post
starach
post
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Za to lubię to forum. Ludzie potrafią tutaj pokazać człowiekowi głupotę nawet jeśli upiera się usilnie że ma rację tongue.gif
Oczywiście macie rację dziękuję.
[SOLVED]
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 - 07:07