具有以数字方式访问的关联值的数组

发布于 2024-07-26 15:31:08 字数 1375 浏览 2 评论 0原文

我有一个关联数组,我可能需要以数字方式访问它(即获取第 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

魔法唧唧 2024-08-02 15:31:08
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];
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];
笨笨の傻瓜 2024-08-02 15:31:08

没有内置的方法可以做到这一点。

如果这是一次性的事情,您可以使用类似的东西:

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

但是,当您向数组添加新项目时,这不会更新。

There isn't a built-in way to do this.

If it's a one-off thing you could use something like:

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

This won't update as you add new items to the array though.

一直在等你来 2024-08-02 15:31:08

我注意到你提到它是一个只读数据库结果集,

如果你使用 mysql 那么你可以这样做

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

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

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

mysql_fetch_array returns an array with both associative and numeric keys

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

如果没有 2024-08-02 15:31:08

有时使用 is_int() 检查是否有关联键或索引会更容易

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];

Sometimes it's easier to check if you have an associative key or an index with is_int()

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文