begin process at 2012 05 28 16:47:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

ArrayAccess, RecursiveArrayIterator


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ArrayAccess, RecursiveArrayIterator

mardi 15 juillet 2008 à 11:50:59 | ArrayAccess, RecursiveArrayIterator

codefalse

Administrateur CodeS-SourceS
Plop les gens :)
Je suis en train de me construire une classe avec des __get et des __set, et je me suis dit que si la personne voulait getter et setter des tableaux à n dimensions, ce n'était pas possible.

Pour cela, il y a ArrayAccess et RecursiveArrayIterator, mais j'ai googlé et j'ai rien de trouvé sur comment m'y prendre pour avoir quelque chose de fonctionnel.

Est-ce que quelqu'un aurait un exemple concret pour que je capte le fonctionnement et l'implémenter dans ma structure ?

Merci de votre aide :)

[ Lien ]
mercredi 16 juillet 2008 à 01:05:19 | Re : ArrayAccess, RecursiveArrayIterator

JoJo738

Membre Club
Réponse acceptée !
Hello ^^

Je suis sur ce sujet depuis ce matin ^^ Et après pas mal de recherche, de patience et de cheveux en moins ... j'ai trouvé une méthode toute simple (le tout dans le OffGet) ^_____^ Mais bon, ça ne doit pas être la meilleur ...

Ensuite, faut juste un simple :
Class MyClass extends ArrayMultiDIterator
{
    function __construct()
    {
       parrent::__construct(array(1, 2, 3 => array(1, 2)));
    }
}




La Class :

/**
 * Class ArrayMultiDIterator
 */
Class ArrayMultiDIterator extends RecursiveIteratorIterator implements ArrayAccess
{
    private $_Array;

    /**
     * Le constructeur
     *
     * @param Array &$Array Un array multidimensionnel
     */
    public function __construct(Array &$Array)
    {
        if( !is_array($Array) ) // PHP 5.0.*
        {
            return ;
        }

        // Si $Array n'est pas une instance de RecursiveArrayIterator
        if( !( $Array instanceof RecursiveArrayIterator ) )
        {
            $Array = new RecursiveArrayIterator($Array);
        }

        $this -> _Array = $Array;

        parent::__construct($this -> _Array);
    }

    /**
     * ArrayAccess::offsetExists
     *
     * @param string $index
     * @returns mixed
     */
    public function offsetExists($key)
    {
        return array_key_exists($key, $this -> _Array);
    }

    /**
     * ArrayAccess::offsetGet
     *
     * @param string $index
     * @returns mixed
     */
    public function offsetGet($key)
    {
        if( array_key_exists($key, $this -> _Array) )
        {
            if( !is_array($this -> _Array [$key]) )
            {
                return $this -> _Array [$key];
            }
            else
            {
                return new self($this -> _Array [$key]);
            }
        }
        return ;
    }


        /**
     * ArrayAccess::offsetSet
     *
     * @param string $index
     * @param   mixed $value
     * @returns void
     */
    public function  offsetSet($key, $value)
    {
        $this -> _Array [$key] = $value;
    }

        /**
     * ArrayAccess::offsetUnset
     *
     * @param string $index
     * @returns void
     */
    public function offsetUnset($key)
    {
        unset($this -> _Array[$key]);
    }

    /**
     * magic method __set
     *
     * @param string $index
     * @returns void
     */
    public function __set($name, $value)
    {
        $this -> _Array [$name] = $value;
    }

    /**
     * Return normal array
     *
     * @param Array $Array optional
     * @returns mixed
     */
    public function returnArray($Array = null)
    {
        $Array = is_null($Array) ? $this -> _Array : $Array;
        $return = array();

        foreach( $Array as $Key => $Value )
        {
            if( $Value instanceof RecursiveArrayIterator )
            {
                $return [$Key] = $this -> returnArray($Value);
            }
            else
            {
                $return [$Key] = $Value;
            }
        }
        return $return;
    }
}

echo '<pre>';

$rec_array = array(
    1 => 'a',
    2 => 'b',
    3 => array(
       0 => 'c.1',
       1 => 'c.2',
       2 => 'c.3',
    ),
    4 => 'd',
);
$a = new ArrayMultiDIterator($rec_array);


// 1° -> On supprime $a[3][1]
unset($a[3][1]);

// 2° -> On édite $a[3][2] = 'c.2'
$a[3][2] = 'c.2';

// 3° -> On ajoute une valeur $a[3][3] = 'c.3'
$a[3][3] = 'c.3';

// Retourne un array MD "propre"
print_r($a -> returnArray());

foreach( $a as $key => $val )
{
    echo str_repeat('   ', $a -> getDepth()), ' ', $key, ' => ', $val, "\n";
}

echo '</pre>';

?>



Et j'obtiens :

Array
(
[1] => a
[2] => b
[3] => Array
(
[0] => c.1
[2] => c.2
[3] => c.3
)

[4] => d
)

1 => a
2 => b
0 => c.1
2 => c.2
3 => c.3
4 => d


Si ma reponse te convient, merci de l'accepter ! 
mercredi 16 juillet 2008 à 09:37:08 | Re : ArrayAccess, RecursiveArrayIterator

codefalse

Administrateur CodeS-SourceS
Merci pour la bonne description, je vais voir cela en détail ! :)

[ Lien ]


Cette discussion est classée dans : arrayaccess, recursivearrayiterator


Répondre à ce message

Sujets en rapport avec ce message



Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,125 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales