是否可以避免 undefined offset PHP array 的警告?
Is it possible to avoid the warning of undefined offset PHP array?
我知道未定义的偏移量会发出 警告而不是错误 但我想知道是否有任何可能的方法来避免这种警告弹出?我打算编写一个函数来测试未定义的偏移量,因为我认为编写多个类似的 if-else
条件来测试偏移量可能需要完成很多工作。
function testOffset($item){
if(isset($item)){
return $item;
}else{
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo testOffset($array1[1]);
在这种情况下,函数运行良好,但当我将未设置的元素分配给函数时,警告也会弹出。无论如何要解决它?
我特意将检查索引设置为1以证明功能正常
您可以通过 php array_values 内置函数来处理:
$yourArray = array_values($yourArray);
这将重新排列您的数组索引
例如
你有一个这样的数组:
$a[0] = '...'
$a[4] = '...'
$a[7] = '...'
$a[8] = '...'
$a[9] = '...'
使用后array_values
$a[0] = '...'
$a[1] = '...'
$a[2] = '...'
$a[3] = '...'
$a[4] = '...'
因为您使用的是不存在的偏移量 1,
您可以使用以下方法进行简单的代码修复:
function testOffset($item){
if(isset($item)){
return $item;
}else{
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo testOffset($array1[0]);
你可以尝试这样的功能
function issetOr($arr, $key)
{
if (isset($arr[$key])) {
return $arr[$key];
} else {
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo issetOr($array1, 1);
或者,如果您不想检查密钥是否存在,请使用
function issetOr($arr, $key)
{
if (\array_key_exists($key, $arr)) {
return $arr[$key];
} else {
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo issetOr($array1, 1);
对于php中的转义警告和通知,您可以简单地使用@
function testOffset($item){
if(isset($item)){
return $item;
}else{
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo @testOffset($array1[1]);
如果您使用 PHP 7+,您可以使用 null coalesce 使整个事情成为一个衬垫...
echo $array1[1] ?? "Nothing here!";
有多种方法可以解决这个问题,但根据您的尝试,您可以这样做:
foreach($array as $key => $val) {}
如果您只是想根据键获取 1 个元素,您应该使用 array_key_exists:
$array1[] = "Hello!";
echo (array_key_exists(1, $array1)) ? $array[1] : "No key";
我知道未定义的偏移量会发出 警告而不是错误 但我想知道是否有任何可能的方法来避免这种警告弹出?我打算编写一个函数来测试未定义的偏移量,因为我认为编写多个类似的 if-else
条件来测试偏移量可能需要完成很多工作。
function testOffset($item){
if(isset($item)){
return $item;
}else{
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo testOffset($array1[1]);
在这种情况下,函数运行良好,但当我将未设置的元素分配给函数时,警告也会弹出。无论如何要解决它?
我特意将检查索引设置为1以证明功能正常
您可以通过 php array_values 内置函数来处理:
$yourArray = array_values($yourArray);
这将重新排列您的数组索引 例如 你有一个这样的数组:
$a[0] = '...'
$a[4] = '...'
$a[7] = '...'
$a[8] = '...'
$a[9] = '...'
使用后array_values
$a[0] = '...'
$a[1] = '...'
$a[2] = '...'
$a[3] = '...'
$a[4] = '...'
因为您使用的是不存在的偏移量 1,
您可以使用以下方法进行简单的代码修复:
function testOffset($item){
if(isset($item)){
return $item;
}else{
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo testOffset($array1[0]);
你可以尝试这样的功能
function issetOr($arr, $key)
{
if (isset($arr[$key])) {
return $arr[$key];
} else {
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo issetOr($array1, 1);
或者,如果您不想检查密钥是否存在,请使用
function issetOr($arr, $key)
{
if (\array_key_exists($key, $arr)) {
return $arr[$key];
} else {
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo issetOr($array1, 1);
对于php中的转义警告和通知,您可以简单地使用@
function testOffset($item){
if(isset($item)){
return $item;
}else{
return "Nothing here!";
}
}
$array1[] = "Hello!";
echo @testOffset($array1[1]);
如果您使用 PHP 7+,您可以使用 null coalesce 使整个事情成为一个衬垫...
echo $array1[1] ?? "Nothing here!";
有多种方法可以解决这个问题,但根据您的尝试,您可以这样做:
foreach($array as $key => $val) {}
如果您只是想根据键获取 1 个元素,您应该使用 array_key_exists:
$array1[] = "Hello!";
echo (array_key_exists(1, $array1)) ? $array[1] : "No key";