Ich habe ein assoziatives Array, auf das ich möglicherweise numerisch zugreifen muss (z. B. den Wert des 5. Schlüssels erhalten).Array mit assoziativen Werten, auf die numerisch zugegriffen wird
$data = array(
'one' => 'something',
'two' => 'else',
'three' => 'completely'
) ;
Ich muss in der Lage sein zu tun:
$data['one']
und
$data[0]
den gleichen Wert bekommen, 'etwas'.
Mein erster Gedanke ist es, eine Wrapper-Klasse zu erstellen, die Arrayaccess mit offsetGet implementiert() Code zu sehen, ob der Schlüssel numerisch ist und entsprechend handeln, 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 ‚isn t irgendwelche eingebauten in PHP, um dies zu tun. Ich würde lieber native Funktionen verwenden, aber bisher habe ich nichts gesehen, was das tut.
Irgendwelche Ideen?
Danke,
Fanis
Ich habe gerade festgestellt, dass ich dies nicht aktualisiert hatte, seitdem ich es fragte. Ich endete mit dem, was ich in der Frage geschrieben habe, aber leicht optimiert, um die numerischen Indizes in einer Klassenvariablen zu halten, nachdem sie zuerst mit array_values () gefunden wurden. – Fanis