Question

J'ai un tableau associatif que je pourrais avoir besoin d'accéder numériquement (c.-à obtenir la valeur de la clé 5).

$data = array(
    'one' => 'something', 
    'two' => 'else', 
    'three' => 'completely'
) ;

Je dois pouvoir faire:

$data['one']

et

$data[0]

pour obtenir la même valeur, 'quelque chose'.

Ma première pensée est de créer une enveloppe de classe qui implémente ArrayAccess avec offsetGet () ayant le code pour voir si la clé est numérique et agir en conséquence, en utilisant array_values:

class MixedArray implements ArrayAccess {

    protected $_array = array();

    public function __construct($data) {
        $this->_array = $data;
    }

    public function offsetExists($offset) {
        return isset($this->_array[$offset]);
    }

    public function offsetGet($offset) {
        if (is_numeric($offset) || !isset($this->_array[$offset])) {
            $values = array_values($this->_array) ;
            if (!isset($values[$offset])) {
                return false ;
            }
            return $values[$offset] ;
        }                
        return $this->_array[$offset];
    }

    public function offsetSet($offset, $value) {
        return $this->_array[$offset] = $value;
    }

    public function offsetUnset($offset) {
        unset($this->_array[$offset]);
    }    

}

Je me demande s'il n'y a pas construit de manière en PHP pour le faire. J'utilise bien plutôt des fonctions natives, mais jusqu'à présent, je ne l'ai pas vu quelque chose qui fait cela.

Toutes les idées?

Merci,
Fanis

Était-ce utile?

La solution

i remarqué que vous avez mentionné qu'il est un résultat de base de données en lecture seule set

si vous utilisez MySQL, vous pouvez faire quelque chose comme cela

$result = mysql_query($sql);
$data = mysql_fetch_array($result);

mysql_fetch_array retourne un tableau avec les deux touches associatives et numériques

http://nz.php.net/manual /en/function.mysql-fetch-array.php

Autres conseils

how about this 

$data = array(
    'one' => 'something', 
    'two' => 'else', 
    'three' => 'completely'
) ;

then 
$keys = array_keys($data);

Then 
$key = $keys[$index_you_want];

Then 
echo $data[$key];

Il n'y a pas un moyen intégré pour le faire.

S'il est une chose unique que vous pouvez utiliser quelque chose comme:

$array = array_merge($array, array_values($array));

Ce ne sera pas mise à jour lorsque vous ajoutez de nouveaux éléments au tableau cependant.

Parfois, il est plus facile de vérifier si vous disposez d'une clé associative ou un index avec is_int()

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top