在 php 问题中转换数组中的 json


Convert json in array in php issue

我有JSON:

[{"name":"point","visibility":false},{"name":"php_first_table","visibility":true}]

我愿意:

$Arr = json_decode($json,true);

我得到:

Array
 (
  [0] => Array
    (
        [name] => point
        [visibility] => 
    )
  [1] => Array
    (
        [name] => php_first_table
        [visibility] => 1
    )
)

如何以布尔形式保存真假?

它已经是布尔形式。尝试使用 var_dump($array[0]['visibility']);,它将输出bool(true)bool(false)

print_r 在输出时自动将布尔值转换为 1 表示真,(empty)转换为 false,但不会更改数据类型。

您可以在数组上使用var_dump来获得更好的输出:

<?php
    $array = array(
        'booleanTrue' => true,
        'booleanFalse' => false,
        'integer' => 1
    );
    var_dump($array);
    print_r($array);
    /*
        array(3) {
          ["booleanTrue"]=>
          bool(true)
          ["booleanFalse"]=>
          bool(false)
          ["integer"]=>
          int(1)
        }
        Array
        (
            [booleanTrue] => 1
            [booleanFalse] => 
            [integer] => 1
        )
    */
?>

演示

编辑

这里有一个函数可以为您提供更好/更紧凑的var_dump输出,与print_r非常相似:

<?php
    function var_dump_r($variable, $return = false) {
        ob_start();
        var_dump($variable);
        $output = preg_replace('/'["([^"]+)"']/', '[$1]', preg_replace('/'s*=>'s*/', ' => ', ob_get_clean()));
        if (!$return) {
            echo $output;
        }
        return $return;
    }
    var_dump_r(array(
        'booleanTrue' => true,
        'booleanFalse' => false,
        'integer' => 1
    ));
    /*
        array(3) {
          [booleanTrue] => bool(true)
          [booleanFalse] => bool(false)
          [integer] => int(1)
        }
    */
?>

对我来说看起来不错。

您是否使用print_r或类似的东西来打印它?(专业提示:不要)。

TRUE 始终是大于 0 的值,FALSE 是 0,所以你只需要检查

if ($visibility) {
   // do something
}