是否可以避免 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 内置函数来处理:

  1. $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);

Demo online

对于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";