只要我没有启用调试,这个if语句就可以正常工作
if (!is_array($post_options['categoryid']['wpcatid'][1])) {
do something
}
但是通过调试我得到了这个通知
注意:未定义的索引:
wpcatid
现在问题是定义索引(我假设使用isset),但是如果设置并且为空(看起来是设置还是空),这是否会起作用?
无论如何,关于如何摆脱这个未定义的索引通知的任何建议?
答案 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()