if ( 在循环函数中设置


if ( isset inside a function for loops

我正在尝试编写一个自定义函数,试图避免每次我在循环中调用数组时重写if(isset(:

function ifvalueexists($valueexists){
if(isset ($valueexists ) ){
    $newvalue = $valueexists;
    return $newvalue;
    }
else {
     $newvalue = '';
     }
     return $newvalue;  
}

测试:

$myarray = array(1, 2, 3);
for ($i = 0; $i < 5; ++$i){
    echo ifvalueexists($myarray[$i]);
}
但我仍然得到:未定义的偏移量:

3 和未定义的偏移量:4。 我做错了什么?谢谢!

数据访问是在调用函数之前进行的。您正在尝试将不存在的数组索引作为参数发送到函数。 您可以使其工作,但您需要将整个数组作为参数以及您尝试访问的索引一起传递,以避免无效索引,如下所示:

function ifvalueexists(array $value, $index) {
    if(isset ($value[$index] ) ){
        return $value[$index]; // why not just return the value directly?
    }
    return ''; // no need for else here
}

如果你想在一行中做到这一点,你也可以这样做:

function ifvalueexists(array $value, $index) {
    return isset($value[$index]) ? $value[$index] : '';
}
我认为

您可能使代码过于复杂。这只是一行,而不是您拥有的 10+ 行代码。

$myarray = array(1, 2, 3);
for ($i = 0; $i < 5; ++$i){
    echo (isset($myarray[$i])) ? $myarray[$i] : '';
}
您可以使用

array_key_exists

$myarray = array(1, 2, 3);
for ($i = 0; $i < 5; ++$i){
   if(array_key_exists($i , $myarray)
      echo $myarray[$i];
}