【问题标题】:Check if variable is true, false, set null if nothing检查变量是否为真,假,如果没有则设置为空
【发布时间】:2017-02-20 20:21:23
【问题描述】:

我正在为一个相当简单的任务而苦苦挣扎。

我正在使用 REST 后端,它有时会接收一个 json 对象作为参数,例如 "api?params={"foo":bar}" 。 “foo”可以是真/假或空(未定义)。

当我回显 myParam(foo) 时,它会回显“真”。 当 foo 为假时,它什么也不返回(我希望它回显“假”), 但是当 foo 未定义时,当它不在 API 调用中时,我希望它返回“null”。

我在网上找到了一个sn-p,我认为它可以工作。

$foo = (null !== $jsonObj->foo ? $jsonObj->foo: "");

但是当 foo 为 false 或 null 时它不起作用。

$foo = var_export($jsonObj->foo, true);

然而,这一行将变量作为字符串返回,并返回“正确”,它在 true 时返回“true”,在 false 时返回“false”,在 null 时返回“NULL”。我可以使用这个。

switch ($foo) {
    case "true":
         $result = true;
         break;
      ...

但是,一定有更好的方法吗?对吧?

--- 更新 ---

现在对我有用的解决方案是: (由于我将值存储在数组中,存储 false 将等于“”)

$foo = is_null($jsonObj->foo) ? null : $jsonObj->foo;

这给了我 foo = null if null/undefined, else true/false...

然后将其存储在数组中,我使用了这个:

$array["foo"] = (!is_null($foo) ? intval($foo) : null);

这将其存储为 0/1 或“”,如果它为空,那么我有 3 个可以使用的状态。

但是阅读你所有的 cmets 让我尝试了最好的解决方案。

【问题讨论】:

标签: php json


【解决方案1】:

你可以使用 php isset() 函数。

即:

if (!isset($foo)) {
    echo "foo is not set : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo is not set : NULL"


$foo = NULL;

if (!isset($foo)) {
    echo "foo = NULL : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo = NULL : NULL"


$foo = false;

if (isset($foo)) {
    echo "foo = false : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo = false : bool(false)"


$foo = true;

if (isset($foo)) {
    echo "foo = true : ";
    var_dump($foo);
}
// returns "foo = true : bool(true)"

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我猜你是在混淆一个包含“true”的字符串和一个真正的布尔值“true”。

    始终使用var_dump 来确保变量的正确类型。 var_dump($jsonObj-&gt;foo)

    这将向您显示确切的类型。

    所以如果它是一个字符串,你必须检查类似的东西(你已经在switch

    if($jsonObj-&gt;foo == "true")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2011-12-04
      • 1970-01-01
      • 2020-10-07
      相关资源
      最近更新 更多