数组检查未定义的偏移量php
Posted
技术标签:
【中文标题】数组检查未定义的偏移量php【英文标题】:Array check undefined offset php 【发布时间】:2017-08-19 13:22:21 【问题描述】:我会试着解释一下。
我有一个array
:
$arrayTime = array(0=>"07",1=>"09", 3=>"13", 4=>"15", 5=>"17", 6=>"19");
这里可以看到没有定义offset 2
现在我需要for
我的array
和offset 2
推数字0(例如)
我试过用这个:
if($arrayTime[$i]=="")
$arrayTime[$i]=0;
是的,它可以工作,但 50 到 50 array
看起来像这样:
$arrayTime = array(0=>"07",1=>"09", 3=>"13", 4=>"15", 5=>"17", 6=>"19",2=>"0");
但在 if
所在的行上会引发错误:
注意:未定义的偏移量:C:\wamp\www\xxx.php 第 10 行中的 2
所以我需要相同的结果,但没有错误。 谢谢大家的帮助:)
【问题讨论】:
它不会抛出错误,它会注意到您正在尝试访问未定义的索引,并警告您代码中可能存在错误。通常这是在一个包中,你试图编写一些“不好的做法”的脚本。你试图解决它的事实是好。而不是$arrayTime[$i]==""
做empty($arrayTime[$i])
非常感谢您,如果您想指出,请回答我的问题。我会把它标记为正确的。
【参考方案1】:
首先,它不会抛出错误。它会警告您代码中可能存在的错误。
if($arrayTime[$i]=="")
这会尝试访问 $arrayTime[$i]
以检索一个值以与您的空字符串进行比较。
读取 和 使用 不存在的数组索引 来获取比较值的尝试是它抛出警告的原因通常是出乎意料的。当密钥不存在时,使用null
,代码继续执行。
if(null == "") // this evaluates to true.
因为您要与空字符串""
进行比较,所以您的答案将是empty()
:
if(empty($arrayTime[$i]))
这意味着您希望密钥不存在,同时您正在检查 值 是否为空。请参阅type comparison table,了解哪些是“空”,哪些不是“空”。
同样的规则适用于isset()
和is_null()
,如果密钥不存在则不会抛出通知。因此,请选择最能满足您需求的功能。
请记住,通过使用这些函数中的任何一个,您都在检查 value 和 not(如果 key 存在于数组中)。你可以使用array_key_exists()
。
if(array_key_exists($i, $arrayTime))
【讨论】:
Oukey,非常感谢您的帮助和宝贵的信息! :)【参考方案2】:要在未收到通知的情况下向未定义的索引添加零,您应该评估要比较的所需索引是否存在,因此不要直接比较,而是先尝试使用 isset 方法检查索引是否存在,检查是否变量已定义且不为 NULL。
所以你要验证的代码应该是这样的:
//check for the index before tryin' to acces it
if( !isset($arrayTime[$i]) )
$arrayTime[$i]=0;
希望它对你有用。
【讨论】:
现在除了出现不存在时,不会运行代码添加出现!isset()
对undefined
或null
有效。由于 OP 正在与 ""
进行比较,isset()
将返回 true,而有效答案将是 !isset()
或 empty()
,其中 empty()
在 what 为空时更具动态性。
@Xorifelse isset 检查索引是否未定义,并且在您的示例中索引 2 没有,因此 isset 应该返回 true 并用零值填充索引 2
@Xorifelse 好吧,您的问题需要检查未定义的索引以将它们全部填充为 0,而不是精确地检查填充有 ""
的索引,因此无需进行 ==""
验证,但如果问题现在是通过检查未定义的索引和""
填充的索引,它应该。
@Xorifelse if( empty($arrayTime[$i]) ) $arrayTime[$i]=0;
将用错误值替换已定义的索引,而不仅仅是未定义为 !isset()
以上是关于数组检查未定义的偏移量php的主要内容,如果未能解决你的问题,请参考以下文章
“注意:未定义的变量”、“注意:未定义的索引”、“警告:未定义的数组键”和“注意:未定义的偏移量”使用 PHP
“注意:未定义的变量”、“注意:未定义的索引”、“警告:未定义的数组键”和“注意:未定义的偏移量”使用 PHP
“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP