具有以数字方式访问的关联值的数组
我有一个关联数组,我可能需要以数字方式访问它(即获取第 5 个键的值)。
$data = array(
'one' => 'something',
'two' => 'else',
'three' => 'completely'
) ;
我需要能够做到:
$data['one']
并
$data[0]
获得相同的价值,“某事”。
我最初的想法是创建一个使用 offsetGet() 实现 ArrayAccess 的类包装器,其中包含代码来查看键是否为数字并使用 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 中是否没有任何内置方法可以执行此操作。 我更愿意使用本机函数,但到目前为止我还没有看到任何可以做到这一点的东西。
有任何想法吗?
谢谢,
法尼斯
I have an associative array that I might need to access numerically (ie get the 5th key's value).
$data = array(
'one' => 'something',
'two' => 'else',
'three' => 'completely'
) ;
I need to be able to do:
$data['one']
and
$data[0]
to get the same value, 'something'.
My initial thought is to create a class wrapper that implements ArrayAccess with offsetGet() having code to see if the key is numeric and act accordingly, using 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]);
}
}
I am wondering if there isn't any built in way in PHP to do this. I'd much rather use native functions, but so far I haven't seen anything that does this.
Any ideas?
Thanks,
Fanis
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
没有内置的方法可以做到这一点。
如果这是一次性的事情,您可以使用类似的东西:
但是,当您向数组添加新项目时,这不会更新。
There isn't a built-in way to do this.
If it's a one-off thing you could use something like:
This won't update as you add new items to the array though.
我注意到你提到它是一个只读数据库结果集,
如果你使用 mysql 那么你可以这样做
mysql_fetch_array
返回一个带有关联键和数字键的数组http://nz.php.net/manual/en/function.mysql-fetch-array.php< /a>
i noticed you mentioned it is a readonly database result set
if you are using mysql then you could do something like this
mysql_fetch_array
returns an array with both associative and numeric keyshttp://nz.php.net/manual/en/function.mysql-fetch-array.php
有时使用
is_int()
检查是否有关联键或索引会更容易Sometimes it's easier to check if you have an associative key or an index with
is_int()