isset()或empty()语句没有给出期望的结果

时间:2018-04-17 13:08:59

标签: php

我正在使用以下代码,无论条件如何,都会给出相同的结果;

foreach($data as $row) 
{
    $a = $row['name']; //Here I am calling name from an api
    if(empty($a)) 
    {
        $a = 'AAA'; // Checking if a$ = $row['']; i.e. 'name' does not exist
    }
    echo $a;
}

问题是当$row['name']有值时,它会通过$a回显,但如果$row['name']不存在,我会收到错误,因为未定义索引:(可能是因为' name'不适用于该行。)

如果$a不存在,如何'AAA'回复为$row['name']

4 个答案:

答案 0 :(得分:1)

尝试检查实际数组,而不是null的声明。

if(!isset($row['name']))
    $a = "AAAA";

https://ideone.com/RuqOBs

差异很微妙但很重要:

isset - 确定变量是否已设置且不是 NULL

empty - 确定变量是否为空

is_null - 查找变量是否为NULL

答案 1 :(得分:1)

像这样写type Field = {test: {more: number} | null} let fields: Field[] = [{test: {more: 55}}] let d = fields[0]; if (d.test) { d.test.more = 55 // object is possibly null } 部分:

else

foreach($data as $row){ if(empty($row['name']) || ! isset($row['name']) ) { $a = 'AAA';} } else { $a = $row['name']; } echo $a; } 检查变量是否包含值(False,0或空字符串),但不是NULL。如果var存在则返回isset();否则TRUE

另一方面,FALSE函数检查变量是否为空值空字符串,0,NULL或False。如果var具有非空和非零值,则返回empty()

答案 2 :(得分:0)

在进行测试之前检查名称是否已设置,然后合并为单个语句。

$a = (isset($row['name']) ? $row['name'] : 'AAA');
echo $a;

答案 3 :(得分:0)

有三种功能可供选择,它们有以下不同之处:

  • array_key_exists($key, $array)
    这将检查数组中是否存在密钥。如果确实如此,无论它背后存储什么值(即使null),它都会返回truefalse oterhwise。
  • isset($array[$key])
    这将检查数组中的键是否存在以及其后面的值是否为null。如果它存在且不是null,它将返回truefalse oterhwise。
  • empty($array[$key])
    这将检查密钥是否存在以及密码后面的值是falsy。如果它不存在或值为falsy(例如nullfalse''0),则会返回true,否则false

所有这些功能都有共同点,你可以直接在阵列上调用它们。对你来说,你可以这样称呼它:

foreach($data as $row) {
    echo array_key_exists('name', $row) ? $row['name'] : 'AAA';
}

您可以将array_key_exists('name', $row)与其他两个函数交换,具体取决于您想要的行为类型。