首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP -循环仅显式设置某些键的数组

PHP -循环仅显式设置某些键的数组
EN

Stack Overflow用户
提问于 2014-12-10 23:35:32
回答 3查看 72关注 0票数 1

我有以下数组

代码语言:javascript
运行
复制
$a = ["one", "dos" => "two", "three"];

正如您所看到的,第二个元素显式地设置了其值的键,但其他两个元素没有。

我想循环遍历数组,但要做一些不同的事情,这取决于该项的键是否显式设置。有点像这样:

代码语言:javascript
运行
复制
foreach($a as $value){
    if( has_explicit_key($value) )
        // Do something
    else
        // Do other stuff
}

我如何才能做到这一点?

PS:我想我可以检查键是否是整数,但是如果键被显式设置为整数,这将不起作用,对吧?

EN

回答 3

Stack Overflow用户

发布于 2014-12-10 23:40:15

尝尝这个

代码语言:javascript
运行
复制
foreach($a as $key=>$value){
    if( is_int($key) )
        // Do something
    else
        // Do other stuff
}

这是最接近的方法,因为密钥通常是,0,1,2......

票数 2
EN

Stack Overflow用户

发布于 2014-12-10 23:39:40

在您的特定情况下,您可以利用没有显式字符串键的元素自动接收整数索引的事实:

代码语言:javascript
运行
复制
$a = ["one", "dos" => "two", "three"];

foreach ($a as $k => $v) {
    if (is_int($k)) {
        // Do something
    } else {
        // Do other stuff
    }
}

如果允许显式键是字符串以外的标量(整型、浮点型、布尔型等),则无法(在运行时)区分用户提供的非字符串键和解析器填充的整型键。具体来说,请参考PHP源函数zend_ast_add_array_element。在该函数中,如果没有显式地给出键(偏移量为IS_UNDEF),那么PHP会分配一个带有zend_hash_next_index_insertrecords bookkeeping note of that fact的键。

现在,如果您不介意,并且能够静态分析数据结构,只需对PHP代码执行tokenizeparse操作,并查看T_DOUBLE_ARROW是否在数组值之前。这可能不值得努力,并且只适用于静态代码。

票数 1
EN

Stack Overflow用户

发布于 2014-12-10 23:40:05

您可以使用以下命令遍历数组

代码语言:javascript
运行
复制
foreach($a as $key => $value) {
    /* stuff */
}

要检查键是否已显式设置,可能只能通过检查键是否为数字来完成(PHP将为数组中没有任何键的值分配数字键)。当然,这意味着您将无法检测到显式设置的数字键。

因此,除非有一些函数(我不知道),否则这将是唯一的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27404906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档