【问题标题】:store false boolean in array将 false 布尔值存储在数组中
【发布时间】:2014-02-06 15:27:08
【问题描述】:

我正在尝试将一个假布尔值存储到一个数组中,以将其作为 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 作为布尔值,它需要真正的布尔值。

【问题讨论】:

  • 使用整数 0 或 1 表示 false 或 true。它会像布尔值一样工作

标签: php arrays pdo boolean


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    它确实存储了 boolean 值。因此,当您获得该值时,您应该期待一个布尔值。如果你使用 var_dump($a) 而不是 print_r 你会看到它被完美地存储为

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

    【讨论】:

    • 是的,但是如果我存储一个真值,它会使用 print_r 打印出来,而不是如果是 false 则不打印。
    【解决方案3】:

    使用整数 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
    )
    

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 2014-04-26
      • 2014-04-05
      • 1970-01-01
      • 2010-10-25
      • 2012-03-10
      • 1970-01-01
      • 2011-03-10
      相关资源
      最近更新 更多