我有一个关联数组,我可能需要以数字方式访问(即获取第5个键的值)。
$data = array(
'one' => 'something',
'two' => 'else',
'three' => 'completely'
) ;
我需要能够做到:
$data['one']
和
$data[0]
获得相同的价值,'某事'。
我最初想的是创建一个类包装器,它实现ArrayAccess,offsetGet()包含代码,用于查看键是否为数字并使用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]);
}
}
我想知道PHP中是否没有内置方法来执行此操作。我更喜欢使用原生函数,但到目前为止我还没有看到任何这样做。
有什么想法吗?
谢谢,
FANIS
答案 0 :(得分: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];
答案 1 :(得分:1)
没有内置方法可以做到这一点。
如果这是一次性的话,你可以使用类似的东西:
$array = array_merge($array, array_values($array));
但是,当您向阵列添加新项目时,这不会更新。
答案 2 :(得分:0)
我注意到你提到它是一个只读数据库结果集
如果您使用的是mysql,那么您可以执行类似这样的操作
$result = mysql_query($sql);
$data = mysql_fetch_array($result);
mysql_fetch_array
返回一个包含关联键和数字键的数组
答案 3 :(得分:0)
有时候检查你是否有一个关联键或一个带is_int()
的索引
if(is_int($key))
return current(array_slice($data, $key, 1));
else
return $data[$key];