【问题标题】:Boolean array in PHPPHP中的布尔数组
【发布时间】:2014-07-12 07:49:35
【问题描述】:

我对 php 中的条件数组有一个疑问。

这是我的代码,

foreach($orders as $order) {
array_push($list, array($order['name'],$order['email'],$order['buyer_accepts_marketing']));
}

现在我得到 $order['buyer_accepts_marketing'] 的值为 1,但我希望值为 true。

我试过了,但没有得到确切的答案。

谁能帮助我?提前致谢!

【问题讨论】:

    标签: php arrays boolean


    【解决方案1】:

    您可以将值转换为布尔值 (c.f. http://www.php.net/manual/en/language.types.type-juggling.php):

    foreach($orders as $order) {
        array_push($list, array(
            $order['name'],
            $order['email'],
            (boolean) $order['buyer_accepts_marketing']
        ));
    }
    

    仅供参考,array_push 的快捷方式是:

    foreach($orders as $order) {
        $list[] = array(
            $order['name'],
            $order['email'],
            (boolean) $order['buyer_accepts_marketing']
        );
    }
    

    我通常觉得它看起来更好:)

    如果你想做更复杂的逻辑来获取你的布尔值,你可以为它创建一个新变量:

    foreach($orders as $order) {
        $buyer_accepts_marketing = false;
        if( $order['buyer_accepts_marketing'] ) $buyer_accepts_marketing = true;
    
        array_push($list, array(
            $order['name'],
            $order['email'],
            $buyer_accepts_marketing
        ));
    }
    

    如果您想将 buyer_accepts_marketing 值设置为字符串值“true”或“false”,请执行以下操作:

    foreach($orders as $order) {
        $buyer_accepts_marketing = "false";
        if( $order['buyer_accepts_marketing'] ) $buyer_accepts_marketing = "true";
    
        array_push($list, array(
            $order['name'],
            $order['email'],
            $buyer_accepts_marketing
        ));
    }
    

    请注意,字符串“true”不是布尔值,“false”也不是。例如:

    if( "true" == true ) echo "It's true";
    

    会回应“这是真的”。但是,也会:

    if( "false" == true ) echo "It's true";
    

    这是因为任何未设置为 "0""" 的字符串都将评估为 true。

    【讨论】:

    • 前段时间我也遇到过类似的问题。我检查了与您上面提到的相同的代码,但是当打印数组时,此代码的值仍然为“1”。我尝试了你的两个代码。
    • @Purushottamzende 你是如何打印数组的?
    • 使用“print_r”。我还尝试将它们保存在数据库中并以字符串形式显示,但没有成功。
    • @Purushottamzende 使用 var_dump 打印这个数组
    • @Purushottamzende print_r 似乎没有明确承认布尔值,但它实际上是一个布尔值。请参阅此示例:codepad.org/5fzAbKO8
    【解决方案2】:

    你可以简单地使用

    foreach($orders as $order) {
    if( $order['buyer_accepts_marketing'] ){ 
           $buyer_accepts_marketing = "true";
    }
    $list[] = array(
            $order['name'],
            $order['email'],
            $buyer_accepts_marketing; 
        );
    }
    

    【讨论】:

    • 是的,我明白了。非常感谢。
    • @railsbox:我有一个疑问,在你的回答中,$order['buyer_accepts_marketing'] 值是什么,它会显示为真的对吗?..
    • @user3667492 如果 $order['buyer_accepts_marketing'] 值为 0 aur empty (null) 它不会进入条件
    • 再次感谢!:)。但如果它是 0 ,我会得到假的。你能帮帮我吗?
    猜你喜欢
    • 2013-05-01
    • 2021-08-01
    • 1970-01-01
    • 2019-07-27
    • 2015-01-07
    • 2013-02-10
    • 2015-05-31
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多