Array mit assoziativen Werten zugegriffen numerisch
-
12-09-2019 - |
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
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
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];