php array_key_exists, !empty 和 isset 无缘无故失败?

Posted

技术标签:

【中文标题】php array_key_exists, !empty 和 isset 无缘无故失败?【英文标题】:php array_key_exists, !empty and isset fails for no reason? 【发布时间】:2016-09-22 08:47:54 【问题描述】:

ubuntu 16.0.4 LTS 上的 php 7.0.8 有人可以给我一个提示,为什么当密钥明确存在时数组密钥检查会失败,程序执行只是停止,即使启用了所有错误报告也没有任何解释。

数组元素中保存的数据类型是一个包含从fedora网站https://torrents.fedoraproject.org/下载的torrent文件的字符串

其他函数也在这里失败,例如数组键上的 !empty

本例中的键是 0

if(array_key_exists($index, $this->_webpage))
            return $this->_webpage[$index];
        else
            /* throw notice */
            trigger_error("Array index is out of range. Can not get webpage.", E_USER_NOTICE);
            return FALSE;
        

注意:我一直在使用相同的功能来检查网页是否已下载并在同一系统上运行,我只是将 torrent 解析添加到我的应用程序中

【问题讨论】:

1.是 $this->webpage 数组还是通过一些吸气剂? 2. 您是否尝试键入 0 或其他键以确保问题不在 $index 中? 数组的内容是来自torrents.fedoraproject.org的种子之一的原始内容,密钥为0 请在您帖子中的代码之前运行var_dump($this->_webpage),并在此处发布结果。 我使用带有 xdebug 的 netbeans ide,iv 只是在 "if(array_key_exists($index, $this->_webpage))" 之后添加一个回显,所有调试都被禁用并且它可以工作。出于某种原因,所有的调试都在那个时候停止了? 【参考方案1】:

SUMMARY array_key_exists 肯定会告诉你数组中是否存在键,而 isset 只会在键/变量存在时返回 true and is not null and empty 如果变量是空字符串,则返回 true、false、array()、NULL、“0?、0 和未设置的变量”

更多详情

isset()

来自 PHP 手册 – isset():

isset — 确定变量是否已设置且不为 NULL

也就是说,只有当变量不为空时才返回true。

empty()

来自 PHP 手册 – empty():

empty — 判断一个变量是否为空

也就是说,如果变量为空字符串,则返回true,false,array(),NULL,“0?,0”和未设置的变量。

另外如果变量不存在,empty() 不会生成警告。

array_key_exists

来自 PHP 手册 – array_key_exists():

检查给定的键或索引是否存在于数组中

因此,如果给定的键已在数组中设置,则 array_key_exists() 返回 TRUE。 key 可以是数组索引的任何可能值。

【讨论】:

我认为他很清楚它应该如何工作,只是对它为什么不工作感到困惑。 好的,我问他一些细节,因为这个描述看不出任何原因。

以上是关于php array_key_exists, !empty 和 isset 无缘无故失败?的主要内容,如果未能解决你的问题,请参考以下文章

php array_key_exists 的多维数组版本

深入理解PHP之isset和array_key_exists对比

PHP 如果array_key_exists,变量等于数组值:如何?

PHP array_key_exists 不起作用;数组不是多维的

PHP isset, array_key_exists配合使用, 并解决效率问题

php array_key_exists, !empty 和 isset 无缘无故失败?