Domanda

Ho un array associativo che potrei avere bisogno di accedere numericamente

(vale a dire ottenere il valore della chiave 5 °).
$data = array(
    'one' => 'something', 
    'two' => 'else', 
    'three' => 'completely'
) ;

Ho bisogno di essere in grado di fare:

$data['one']

e

$data[0]

per ottenere lo stesso valore, 'qualcosa'.

Il mio primo pensiero è quello di creare un wrapper classe che implementa ArrayAccess con offsetGet () con il codice per vedere se la chiave è numerico e agire di conseguenza, utilizzando 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]);
    }    

}

Mi chiedo se non v'è alcuna costruito nel modo in PHP per fare questo. Preferirei mille volte usare funzioni native, ma finora non ho visto nulla che fa questo.

Tutte le idee?

Grazie,
Fanis

È stato utile?

Soluzione

ho notato che lei ha citato è un risultato database di sola lettura set

se si utilizza MySQL allora si potrebbe fare qualcosa di simile

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

mysql_fetch_array restituisce un array con chiavi sia associative e numerici

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

Altri suggerimenti

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];

Non c'è un modo integrato per effettuare questa operazione.

Se è una cosa una tantum si potrebbe usare qualcosa come:

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

Questa non verrà aggiornato quando si aggiungono nuovi elementi alla matrice però.

A volte è più facile da controllare se si dispone di una chiave associativa o di un indice con is_int()

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top