数组检查未定义偏移量php

时间:2017-03-27 00:28:09

标签: php arrays if-statement for-loop

我会尝试解释它。

我有array

 $arrayTime = array(0=>"07",1=>"09", 3=>"13", 4=>"15", 5=>"17", 6=>"19");

您可以在此处看到未定义offset 2 现在我需要for我的arrayoffset 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所在的行上会抛出错误:

  

注意:未定义的偏移量:第10行的C:\ wamp \ www \ xxx.php中的2

所以我需要相同的结果,但没有错误。 感谢您的帮助:)

2 个答案:

答案 0 :(得分:19)

首先,它不会抛出错误。它会警告您代码中可能存在错误。

if($arrayTime[$i]==""){}

尝试访问 $arrayTime[$i]以检索要与空字符串进行比较的值。

尝试读取 使用 不存在的数组索引来获取比较值是它之所以抛出警告,是因为这通常是意料之外的。当密钥不存在时,使用null代替,代码继续执行。

if(null == ""){} // this evaluates to true.

因为您要与空字符串""进行比较,所以答案为empty()

if(empty($arrayTime[$i])){}

这意味着您希望密钥不存在,同时您正在检查是否为空。请参阅type comparison table,了解未考虑的内容和内容,以及#39;空白'。

相同的规则适用于isset()is_null(),如果密钥不存在,它不会抛出通知。因此,选择最能满足您需求的功能。

请注意,如果数组中存在,则使用这些功能中的任何一项都会检查。您可以使用array_key_exists()

if(array_key_exists($i, $arrayTime)){}

答案 1 :(得分:0)

在未获取通知的情况下将零添加到未定义的索引中您应该评估是否存在要比较的所需索引,因此请先使用isset方法直接尝试检查索引是否存在,然后检查如果变量已定义且不是NULL。

因此,您要验证的代码应如下所示:

    //check for the index before tryin' to acces it
    if( !isset($arrayTime[$i]) ){
       $arrayTime[$i]=0;
    }

希望它适合你。