Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwołanie do wartości tablicy wielowymiarowej
Forum PHP.pl > Forum > PHP
starach
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. ?>
qqrq
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. ?>
starach
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. ?>
Ludvik
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ę...
starach
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]
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.