如果我在PHP 5.5中有这个代码/类,我会把它放在JSON数组中:
# Define the class
class Equip {
public $var1 = null;
public $var2 = null;
}
# For debugging purpose only - specify what should be shown
$show_var1 = false;
$show_var2 = true;
while loop ...
# Initialize a new class member
$equip = new Equip();
# Only populate the variable if it should be shown
if($show_var1) {
$equip->var1 = $var1;
}
# Only populate the variable if it should be shown
if($show_var2) {
$equip->var2 = $var2;
}
# Populate the JSON array
$jsonArr[] = $equip;
end while ...
# Output the JSON encoded array
echo json_encode($jsonArr, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);
它将产生此输出(var1始终为NULL):
[
{
"var1": null,
"var2": 656978
},
{
"var1": null,
"var2": 136981
}
]
如何隐藏var1变量以避免其进入JSON输出?
查看JsonSerializable
接口,该接口在PHP>=5.4中可用。
如果让类实现JsonSerializable
,则可以实现jsonSerialize()
方法来只返回应该编码的数据。
class Equip implements JsonSerializable {
public $var1 = null;
public $var2 = null;
public function jsonSerialize() {
$out = array();
if (!is_null($this->var1)) $out['var1'] = $this->var1;
if (!is_null($this->var2)) $out['var2'] = $this->var2;
return $out;
}
}
一种方法是使用array_filter()来删除NULL或false元素。这应该有效:
# Populate the JSON array
$jsonArr[] = array_filter($equip);
有关详细信息,请参阅array_filter()文档。请记住,如果没有传入回调,则任何计算结果为FALSE的值都将被删除,因此,如果您计划将布尔值存储在$var1或$var2中,则此解决方案将不起作用。
注意:我确实认为@jcsanyi的解决方案是最好的,但我认为这可能是最简单的解决方法。