未定义的索引没有数组

时间:2014-05-26 15:09:06

标签: php isset

只要我没有启用调试,这个if语句就可以正常工作

   if (!is_array($post_options['categoryid']['wpcatid'][1])) { 
       do something
  }

但是通过调试我得到了这个通知

  

注意:未定义的索引:wpcatid

现在问题是定义索引(我假设使用isset),但是如果设置并且为空(看起来是设置还是空),这是否会起作用?

无论如何,关于如何摆脱这个未定义的索引通知的任何建议?

2 个答案:

答案 0 :(得分:1)

您正在检查$post_options['categoryid']['wpcatid'][1]是否不是数组,但前面的键“wpcatid”也不存在。

因此,您需要与isset结合使用以避免错误。

下面是一个示例,但您需要的逻辑可能需要不同的声明:

if (isset(
        $post_options['categoryid'], 
        $post_options['categoryid']['wpcatid'], 
        $post_options['categoryid']['wpcatid'][1]
       ) && 
    !is_array($post_options['categoryid']['wpcatid'][1])
) { /* do stuff */ } 

在检查$post_options['categoryid']['wpcatid'][1]是否不是数组之前,上面检查所有内容是否按顺序存在。但是,如果它没有设置,但您仍然需要运行条件逻辑,则需要根据需要进行修改。

如果您正在编写Wordpress插件,则无法更改错误报告级别,并且您绝对不应该使用错误静默@运算符。

最好明确规定在哪些条件下执行逻辑的特定部分。


从评论中,听起来你需要的是:

if (
    empty($post_options['categoryid']) || 
    empty($post_options['categoryid']['wpcatid']) ||
    empty($post_options['categoryid']['wpcatid'][1]) ||
    !is_array($post_options['categoryid']['wpcatid'][1]) 
)

用简单的英语:

如果(帖子选项中没有类别ID ......或者有,但是没有wpcatid,或者有一个wpcatid,但是那里没有一个键为1的元素,或者存在,但是该元素不是一个数组)

答案 1 :(得分:0)

为什么不使用isset()? PHP中的isset()函数确定变量是否已设置且不是NULL。它返回一个布尔值,也就是说,如果设置了变量,它将返回true,如果变量值为null,则返回false。

另一种选择是使用error_reporting(E_ALL ^ E_NOTICE);您还可以关闭php.ini文件或.htaccess文件中的错误报告,但如果您仍处于测试阶段,则不会将其视为明智之举。< / p>

第三,虽然是discoraged,但是要使用@ suppress error选项。您可以在此处找到更多相关信息。 http://php.net/manual/en/language.operators.errorcontrol.php。我认为你必须坚持使用isset()

的第一个选项