首页 > 解决方案 > Isset 返回未定义的索引,尽管它已设置

问题描述

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

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

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

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"];

亲切的问候,谢谢!

标签: phparrayslaravelissetundefined-index

解决方案


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

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

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


推荐阅读