数组检查未定义的偏移量php

Dol*_*lis 11 php arrays for-loop if-statement

我会试着解释一下.

我有一个array:

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

在这里你可以看到没有定义offset 2 ,现在我需要forarrayoffset 2推送号码0(例如)我尝试使用这个:

if($arrayTime[$i]==""){
   $arrayTime[$i]=0;
}
Run Code Online (Sandbox Code Playgroud)

是的它有效,但50到50 array看起来像这样:

$arrayTime = array(0=>"07",1=>"09", 3=>"13", 4=>"15", 5=>"17", 6=>"19",2=>"0");
Run Code Online (Sandbox Code Playgroud)

但是在if哪一行它会抛出一个错误:

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

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

Xor*_*lse 22

首先,它不会抛出错误.它会为您提供有关代码中可能存在的错误的警告.

if($arrayTime[$i]==""){}
Run Code Online (Sandbox Code Playgroud)

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

要尝试阅读 使用一个不存在的数组索引,以获取比较的价值就是它抛出的警告,因为这通常是意外的原因.当使用密钥不存在时null,代码继续执行.

if(null == ""){} // this evaluates to true.
Run Code Online (Sandbox Code Playgroud)

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

if(empty($arrayTime[$i])){}
Run Code Online (Sandbox Code Playgroud)

这意味着您希望密钥不存在,同时您正在检查空.请参阅类型比较表以查看什么是什么以及什么不被认为是"空".

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

请记住,通过使用这些函数中的任何一个,您将检查值,不是数组中是否存在该.你可以用array_key_exists()它.

if(array_key_exists($i, $arrayTime)){}
Run Code Online (Sandbox Code Playgroud)