是否有可能避免未定义偏移量PHP数组的警告?

时间:2018-08-14 07:43:42

标签: php arrays undefined-index

我知道未定义的偏移量会发出警告而不是错误,但是我想知道是否有任何可能的方法来避免这种警告弹出?我打算编写一个函数来测试未定义的偏移量,因为我认为编写多个类似的if-else条件来测试偏移量可能会做很多工作。

function testOffset($item){
        if(isset($item)){
            return $item;
        }else{
            return "Nothing here!";
        }
    }
$array1[] = "Hello!";
echo testOffset($array1[1]);

在这种情况下,该功能运行良好,但是当我将unset元素分配给功能时,警告也会弹出。无论如何要解决吗?


我故意将检查索引设置为1以证明该功能正常工作

6 个答案:

答案 0 :(得分:4)

您可以尝试这样的功能

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

答案 1 :(得分:3)

有多种方法可以解决此问题,但是根据您要执行的操作,您可以执行以下操作:

foreach($array as $key => $val) {}

如果您只是想根据密钥获得1个元素,则应该使用array_key_exists

$array1[] = "Hello!";
echo (array_key_exists(1, $array1)) ? $array[1] : "No key";

答案 2 :(得分:2)

如果您使用的是PHP 7+,则可以使用null coalesce将整个过程变成一个衬套...

public class Startup {

    public static void main(String[] args) {

        List<Foo> foos = new ArrayList<>();

        // 1) Does not compile
        foos.forEach(Startup::doSomething1.andThen(Startup::doSomething2));

        Consumer<Foo> doSomething1 = Startup::doSomething1;
        Consumer<Foo> doSomething2 = Startup::doSomething2;

        // 2) Works as expected 
        foos.forEach(doSomething1.andThen(doSomething2));

    }

    public static void doSomething1(Foo foo) {

    }

    public static void doSomething2(Foo foo) {

    }

    public static class Foo {

    }

}

答案 3 :(得分:1)

对于php中的转义警告和通知,您可以仅使用@

function testOffset($item){
    if(isset($item)){
        return $item;
    }else{
        return "Nothing here!";
    }
}
$array1[] = "Hello!";
echo @testOffset($array1[1]);

答案 4 :(得分:0)

因为使用的偏移量1不存在,所以

您可以使用以下代码进行简单的代码修复:

function testOffset($item){
        if(isset($item)){
            return $item;
        }else{
            return "Nothing here!";
        }
    }
$array1[] = "Hello!";
echo testOffset($array1[0]);

答案 5 :(得分:-2)

您可以通过php array_values内置函数来处理此问题:

  1. a:before { content: "\f055"; font-family: FontAwesome; left:0; position:absolute; top:0; }

这将重新排列您的数组索引 例如  你有一个像这样的数组:

$yourArray = array_values($yourArray);

使用array_values后

 $a[0] = '...'
 $a[4] = '...'
 $a[7] = '...'
 $a[8] = '...'
 $a[9] = '...'