1

数値的にアクセスする必要があるかもしれない連想配列があります(つまり、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にないのではないかと思います。私はむしろネイティブ関数を使用したいのですが、これまでのところ、これを行うものは見たことがありません。

何か案は?

ありがとう、
ファニス

4

4 に答える 4

4
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];
于 2009-07-13T07:58:10.163 に答える
1

これを行うための組み込みの方法はありません。

1回限りの場合は、次のようなものを使用できます。

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

ただし、配列に新しいアイテムを追加しても、これは更新されません。

于 2009-07-13T07:58:48.523 に答える
0

読み取り専用のデータベース結果セットであるとおっしゃっていましたが、

mysqlを使用している場合は、次のようなことができます

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

mysql_fetch_array連想キーと数値キーの両方を含む配列を返します

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

于 2009-07-13T08:55:46.210 に答える
0

連想キーまたはインデックスがあるかどうかを確認する方が簡単な場合がありますis_int()

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];
于 2009-07-13T10:25:55.247 に答える