Isset 返回未定义的索引,尽管它已设置

Isset returns undefined index although it is set

提问人:Jan 提问时间:5/8/2018 最后编辑:Jan 更新时间:5/8/2018 访问量:711

问:

我有一个奇怪的问题。我调用一个自写的函数,它返回我的 SQL 结果。

$isBusinessAddress = PartnernetShop::invoiceAddressIsBusinessAddress($userID)->toArray();

我想获取第一个数组的meta_value,因为这是我需要的返回值。出于安全原因,我检查索引和值是否退出:

if(isset($isBusinessAddress[0]["meta_value"])){ ... }

此 if 语句返回:

未定义索引:meta_value

但是,如果我检查上面 2-3 行的值,它就可以工作!

var_dump($isBusinessAddress);
var_dump(isset($isBusinessAddress[0]["meta_value"]));
var_dump(array_key_exists("meta_value", $isBusinessAddress[0]));
var_dump($isBusinessAddress[0]["meta_value"]);

输出:

array(1) {
  [0]=>
  array(2) {
    ["user_id"]=>
    int(12)
    ["meta_value"]=>
    string(4) "Nein"
  }
}
bool(true)
bool(true)
string(4) "Nein"

这是我的代码:

$isBusinessAddress = PartnernetShop::invoiceAddressIsBusinessAddress($userID)->toArray();

var_dump($isBusinessAddress);
var_dump(isset($isBusinessAddress[0]["meta_value"]));
var_dump(array_key_exists("meta_value", $isBusinessAddress[0]));
var_dump($isBusinessAddress[0]["meta_value"]);
//die();

if(isset($isBusinessAddress[0]["meta_value"])){
    $isBusinessAddress = [0]["meta_value"];
}else{
    $isBusinessAddress = "NotSet";
}

你们能告诉我我做错了什么吗?我已经多次使用这个 if 语句......

更新:索引肯定存在,因为我传递了 if 语句。我只是在尝试为变量赋值的行上收到消息“未定义的索引:meta_value”!以下行:

$isBusinessAddress = [0]["meta_value"];

亲切的问候,谢谢!

PHP 数组 laravel isset undefined-index

评论

0赞 Puneet 5/8/2018
即将出现数据集合,可能在记录集中检查的某些值没有索引?
0赞 Jan 5/8/2018
有。检查输出...我转储了上面的 4 行数组,isset() 方法效果很好......但为什么不在 if 语句中呢?
0赞 GordonM 5/8/2018
你可能不在你认为你所处的阵列中。我建议在 if 块内做一个var_dump,以确保。
0赞 Mason Stedman 5/8/2018
你对如何正确处理sql结果/验证有一个有趣的想法。也许攻击那将是一个更好的起点。

答:

3赞 Dormilich 5/8/2018 #1

问题不在于 isset(),而在于后面的行:

$isBusinessAddress = [0]["meta_value"];

尝试从不存在此密钥的数组(resp.)中获取密钥。meta_value[0]array(0 => 0)

评论

0赞 Jan 5/8/2018
如果它不退出,我就不会传递 isset() 方法!
1赞 Dormilich 5/8/2018
@Jan 请仔细阅读正文!正如我所说,发生错误的原因是您(无意中)使用了与您想象的不同的数组。正如我也说过的,问题不在于.isset()
0赞 Jan 5/8/2018
明白了......只是我自己发现了错误..“$isBusinessAddress = $isBusinessAddress[0][”meta_value“];” 谢谢!
1赞 Jonathon 5/8/2018
问题是你刚刚使用了 ,你错过了变量部分,所以在这里你有效地尝试访问包含单个值的数组部分,这会导致你的错误[0]['meta_value']meta_value0