数値的にアクセスする必要があるかもしれない連想配列があります(つまり、5番目のキーの値を取得します)。
$data = array(
'one' => 'something',
'two' => 'else',
'three' => 'completely'
) ;
私はできる必要があります:
$data['one']
と
$data[0]
同じ値を取得するには、「何か」。
私の最初の考えは、キーが数値であるかどうかを確認し、array_valuesを使用してそれに応じて動作するコードを持つoffsetGet()を使用してArrayAccessを実装するクラスラッパーを作成することです。
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]);
}
}
これを行うための組み込みの方法がPHPにないのではないかと思います。私はむしろネイティブ関数を使用したいのですが、これまでのところ、これを行うものは見たことがありません。
何か案は?
ありがとう、
ファニス