下面的代码不输出任何东西:

$bool_val = (bool)false;
echo $bool_val;

但是下面的代码输出1:

$bool_val = (bool)true;
echo $bool_val;

当$bool_val为false时,是否有更好的方法打印0或false,而不是添加if语句?


当前回答

如果你想调试一个数组,你可以试试这个:

function debug_array($a){
    return array_map(function($v){
        return is_bool($v) ? ($v ? 'true' : 'false') : $v;
    }, $a);
}

使用它:

$arr = debug_array(['test' => true, 'id' => false]);
print_r($arr); // output Array ( [test] => true [id] => false )

其他回答

Json_encode将开箱即用,但它并不漂亮(缩进等):

echo json_encode(array('whatever' => TRUE, 'somethingelse' => FALSE));

给了…

{"whatever":true,"somethingelse":false}

您正在将一个布尔类型转换为布尔类型,并期望显示一个整数。它适用于真,但不适用于假。因为你想要一个整数:

echo (int)$bool_val;

如果你想调试一个数组,你可以试试这个:

function debug_array($a){
    return array_map(function($v){
        return is_bool($v) ? ($v ? 'true' : 'false') : $v;
    }, $a);
}

使用它:

$arr = debug_array(['test' => true, 'id' => false]);
print_r($arr); // output Array ( [test] => true [id] => false )

这将打印布尔值,而不是1/0。

    $bool = false;

    echo json_encode($bool);   //false

不,因为另一个选择是修改Zend引擎,人们很难将其称为“更好的方法”。

编辑:

如果你真的想,你可以使用一个数组:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];