我正在努力完成一项相当简单的任务。
我正在使用REST后端,它有时会收到一个json-object作为参数,如“api?params = {”foo“:bar}”。并且“foo”可以是true / false或null(undefined)。
当我回到myParam(foo)时为真,它回应“真实”。 当foo为false时,它什么都不返回(我希望它回显“false”), 但是当没有定义foo时,当它不在API调用中时,我希望它返回“null”。
我很长一段时间在网上找到了一个片段,我认为它正在发挥作用。
$foo = (null !== $jsonObj->foo ? $jsonObj->foo: "");
但是当foo为false或null时它不起作用。
$foo = var_export($jsonObj->foo, true);
然后该行将变量作为字符串返回,并将其返回为“correct”,当为true时返回“true”,在false时返回“false”,在null时返回“NULL”。这个我可以合作。
switch ($foo) {
case "true":
$result = true;
break;
...
但是,必须有更好的方法吗?正确?
---更新---
现在对我有用的解决方案是这样的: (因为我将值存储在数组中,存储false将等于“”)
$ foo = is_null($ jsonObj-> foo)? null:$ jsonObj-> foo;
如果null / undefined,则给我foo = null,否则为true / false ...
然后将它存储在数组中,我使用了这个:
$ array [“foo”] =(!is_null($ foo)?intval($ foo):null);
这将它存储为0/1或“”如果它为null,那么我有3个状态我可以使用。
但阅读所有评论让我尝试了最好的解决方案。
答案 0 :(得分: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)"
希望它有所帮助。
答案 1 :(得分:0)
我猜你混合了一个包含“true”的字符串和一个真正的布尔值“true”。
始终使用var_dump
来确保变量的类型正确。
var_dump($jsonObj->foo)
这将显示确切的类型。
因此,如果它是一个字符串,你必须检查类似的东西(你已经在switch
中的内容)
if($jsonObj->foo == "true")