Frage

Ich habe ein assoziatives Array, das ich brauche, könnte numerisch zuzugreifen (dh den fünften Schlüssel Wert erhalten).

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

Ich muss in der Lage zu tun:

$data['one']

und

$data[0]

den gleichen Wert zu bekommen, 'etwas'.

Mein erster Gedanke ist es, eine Wrapper-Klasse zu erstellen, die mit Arrayaccess offsetGet () mit Code implementiert, um zu sehen, ob der Schlüssel entsprechend numerischen und handelt, mit 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]);
    }    

}

Ich frage mich, ob es nicht in Art und Weise in PHP, dies zu tun gebaut ist. Ich würde viel lieber verwenden native Funktionen, aber bisher habe ich nichts gesehen, das dies tut.

Irgendwelche Ideen?

Danke,
Fanis

War es hilfreich?

Lösung

i bemerkt, dass Sie erwähnen es ist eine Nur-Lese-Datenbank Ergebnismenge

Wenn Sie MySQL verwenden, dann könnte man so etwas tun

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

mysql_fetch_array geben einen Array sowohl mit assoziativen und numerischen Tasten

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

Andere Tipps

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

Es gibt keine eingebaute Möglichkeit, dies zu tun.

Wenn es eine einmalige Sache, die Sie so etwas wie verwenden:

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

Dies wird nicht aktualisiert, wenn Sie aber auf dem Array neue Elemente hinzuzufügen.

Manchmal ist es einfacher zu überprüfen, ob Sie einen assoziativen Schlüssel oder einen Index mit is_int() haben

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top