Matriz con valores asociativos accede numéricamente
-
12-09-2019 - |
Pregunta
Tengo una matriz asociativa que puede ser que necesite acceder a la numéricamente (es decir, obtener el valor de clave 5º).
$data = array(
'one' => 'something',
'two' => 'else',
'three' => 'completely'
) ;
Tengo que ser capaz de hacer:
$data['one']
y
$data[0]
para obtener el mismo valor, 'algo'.
Mi idea inicial es crear un contenedor de clase que implementa ArrayAccess con offsetGet () que tiene código para ver si la clave es numérico y actuar en consecuencia, el uso de 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]);
}
}
Me pregunto si no hay ninguna construido en forma de PHP para hacer esto. Yo prefiero usar tanto las funciones nativas, pero hasta ahora no he visto nada que hace esto.
¿Alguna idea?
Gracias,
Fanis
Solución
i di cuenta de que usted ha mencionado que es el resultado de base de datos de sólo lectura definido
si está utilizando MySQL entonces se podría hacer algo como esto
$result = mysql_query($sql);
$data = mysql_fetch_array($result);
mysql_fetch_array
devuelve una matriz con dos teclas asociativos y numéricos
Otros consejos
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];
No hay un mecanismo incorporado para realizar esta acción.
Si se trata de una cosa de una sola vez usted podría utilizar algo como:
$array = array_merge($array, array_values($array));
Esto no se actualizará a medida que agrega nuevos elementos a la matriz sin embargo.
A veces es más fácil comprobar si tiene una clave asociativa o un índice con is_int()
if(is_int($key))
return current(array_slice($data, $key, 1));
else
return $data[$key];