Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zrobic klasę dziedziczącą ArrayAccess (lub jej pochodne) reprezentującą tablice wielowymiarową
Forum PHP.pl > Forum > PHP
doseo
Czy da się w php napisać klasę która reprezentowała by tablicę 2 (i więcej) wymiarową, a dostęp do jej obiektów wyglądał by jak przy zwykłej tablicy, tzn.:
  1. <?php
  2. $tablica = new A;
  3. $tablica[1][2] = "cokolwiek";
  4. ?>

I jeśli się da to jak to zrobić?
Zaznaczę, że wiem jak rozwiązać problem w przypadku jednego wymiaru:)

//do Moda: zapomniałem o dziale obiektowym, a opcji "usuń post" nie widzę.
devnul
jest rozwiązanie mianowicie każdy poziom zagnieżdżenia poza ostatnim musiałby zwracać obiekt implementujący arrayacces, innego wyjścia nie ma
doseo
Dzięki, tak też miałem zrobione. Ale w konstruktorze zapomniałem o "$this->" smile.gif
Często popełniam takie błędy pisząc w nocy - amatorszczyzna:)

  1. <?php
  2.  
  3. class A implements ArrayAccess
  4. {
  5.    protected $_array = array();
  6.    
  7.    public function __construct( $array )
  8.    {
  9.        foreach ( $array as $k => $v )
  10.            if ( is_array( $v ) )
  11.                $this->_array[$k] = new A( $v );
  12.            else
  13.                $this->_array[$k] = $v;
  14.    }
  15.    
  16.    public function offsetExists( $offset )
  17.    {
  18.        return array_key_exists( $offset, $this->_array );
  19.    }
  20.    
  21.    public function offsetGet( $offset )
  22.    {
  23.        return $this->_array[$offset];
  24.    }
  25.    
  26.    public function offsetSet( $offset, $value )
  27.    {
  28.        $this->_array[$offset] = $value;
  29.        
  30.        return true;
  31.    }
  32.    
  33.    public function offsetUnset( $offset )
  34.    {
  35.        unset( $this->_array[$offset] );
  36.        
  37.        return true;
  38.    }
  39. }
  40. ?>
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.