1

如果我在 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 输出?

4

2 回答 2

4

查看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;
    }
}
于 2013-07-05T19:56:06.873 回答
0

一种方法是使用 array_filter() 删除 NULL 或 false 元素。这应该有效:

# Populate the JSON array
$jsonArr[] = array_filter($equip);

有关更多信息,请参阅array_filter() 文档。请记住,如果没有传入回调,任何计算结果为 FALSE 的内容都将被删除,因此如果您计划将布尔值存储在 $var1 或 $var2 中,此解决方案将不起作用。

注意:我确实认为@jcsanyi 的解决方案是最好的,但我认为这可能是解决它的最简单方法。

于 2013-07-05T19:55:53.837 回答