php数组不包含,关于php:未定义索引,不包含数组

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

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

do something

}

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

Notice: Undefined index: wpcatid

现在的问题是定义索引(我猜想是isset),但是如果将其设置为空(似乎是设置为空),则可以正常工作吗?

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

您正在检查$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的元素,或者有,但是该元素不是数组)

这是有道理的...但是,由于isset为false,并且!is_array为true,因此它将解析为false。当这解析为true时,我需要做一些事情(没有数组)..这似乎是主要问题...这有意义吗?

@艾伦。它只是根据您的需要调整支票。添加了一些细节。香港专业教育学院在那里使用空而不是isset-下面的简单英语解释解释了它的作用。此处有更多详细信息:stackoverflow.com/questions/1219542/

实际上,我尝试使用您以前的代码,如果我先检查是否存在setset和数组(这是我不想要的),这很有意义,因此建议这样做:if(!(isset($ post_options [categoryid],$ post_options [categoryid] [wpcatid],$ post_options [categoryid] [wpcatid] [1])&& is_array($ post_options [categoryid] [wpcatid] [1]))){//做东西

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

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

第三,尽管不满意,但要使用@抑制错误选项。您可以在此处找到更多信息。 http://php.net/manual/zh/language.operators.errorcontrol.php。我认为您只需要坚持使用isset()

谢谢,好了,这是wordpress插件,不幸的是有些人已经调试了,所以我测试了debug以消除错误和通知。那么如果(isset(x)&&!is_array(x))...似乎isset将为false,is_array为true,那么结果将为false-我的原始语句为true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值