【问题标题】:Is there a way to check whether a value equals 0 or 1, with a single comparison?有没有办法通过一次比较来检查一个值是等于 0 还是等于 1?
【发布时间】:2015-09-03 05:58:04
【问题描述】:

我有很多类似的代码

    case 'add':
    {   
        $succeeded = $wpdb->insert('coms', 
                                   array('name'=>$name,'story'=>$story,'imgurl'=>$imgurl)
                                   ) === 1;
        break;
    }

我刚刚意识到我需要将它们全部更改以与 1 和 0 进行比较。它们都会像

        $numRowsAffected = $wpdb->insert('coms', 
                                   array('name'=>$name,'story'=>$story,'imgurl'=>$imgurl)
                                   );
        $succeeded = $numRowsAffected === 1 || $numRowsAffected === 0;

但是,我想知道是否有一种更紧凑、更优雅和更有效的方法来检查值与 1 或 0 的对比。我可以使用位移运算符一举完成吗? p>

【问题讨论】:

  • in_array($numRowsAffected, array(1, 0), TRUE); 怎么样?
  • 不一定更优雅,当然效率更低,但in_array($numRowsAffected, [0,1])

标签: php algorithm optimization bit-manipulation


【解决方案1】:
if ($value | 1 === 1)

我认为这应该可以解决问题。

【讨论】:

  • 哈哈!完美的。谢谢。
  • 没关系。我意识到这可能行不通,因为在这种情况下$value 可以是false(因此是===)。我不确定false | 1 会评估什么...
  • 那么它不会在一个语句中起作用。任何数学比较都会将值转换为数字,而 false 将转换为 0。返回多种类型的方法让我有点发疯。
【解决方案2】:

你可以使用in_array:

$succeeded = in_array($numRowsAffected, array(0, 1));

【讨论】:

    【解决方案3】:

    您可以检查variable & 0b1111111111111110 是否为零,您可以在其中调整位模式的长度以适应变量的最大大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 2013-06-14
      • 2021-08-13
      • 2019-12-23
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      相关资源
      最近更新 更多