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

¿Fue útil?

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

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

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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top