Tableau avec des valeurs associatives accès numérique
-
12-09-2019 - |
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
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
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];