在数组中存储false boolean

时间:2014-02-06 15:27:09

标签: php arrays pdo boolean

我正在尝试将假布尔值存储到数组中,以将其作为PDO预处理语句中的值传递:

$a = Array('bool' => '0');

if($a['bool'] === '1') {
    $a['bool'] = true;
}
else {
    $a['bool'] = false;
}

print_r($a);

结果是:

Array
(
    [bool] => 
)

我希望:

Array
(
    [bool] => 0
)

因为如果我存储一个真正的布尔值,print_r函数会打印true作为'bool'的值。

将$ ['bool']设为空不会向我的 bit 字段发送false值并使我的查询无效。

该值以:

传递
$sth->execute( $a );

我该如何解决这个问题?


对于谁说“使用1和0”,嗯,PDO不接受整数1和0的布尔值,它需要真正的布尔值。

3 个答案:

答案 0 :(得分:4)

您可以使用1或0代替true或false。另外,下面是另一种方法:

if($a['bool'] === '1') {
    $a['bool'] = intval(true);
} else {
    $a['bool'] = intval(false);
}

答案 1 :(得分:1)

使用整数0或1表示false或true。它将像布尔一样工作。如果使用整数作为布尔值,则不应使用===运算符 你可以像这样简单地测试:

if($intVar) {
     //do something it is true
}
else{
 //do something it is false
}

只需在数组中将0或1作为对象:

 $a = Array('bool' => 0);

然后像这样使用它:

$sth->execute( $a );

它没有经过测试但应该起作用:)

演示:https://eval.in/98660

 //test for false
  $a = Array('bool' => 0);


    if($a['bool']){
      echo "It is true";
    }
    else {
     echo "It is false \n";
    }

    print_r($a);

    //second test for true

    $a = Array('bool' => 1);




  if($a['bool']){
    echo "It is true";
  }
   else {
     echo "It is false \n";
  }
   print_r($a);

输出:

It is false 
Array
(
    [bool] => 0
)
It is trueArray
(
    [bool] => 1
)

答案 2 :(得分:1)

它存储布尔值值。因此,当您获得该值时,您应该期望一个布尔值。如果您使用var_dump($a)而不是print_r,您会看到它完全存储为

array(1) {
  'bool' =>
  bool(false)
}