反转逻辑和条件

时间:2011-05-09 01:29:37

标签: php arrays multidimensional-array if-statement conditional-operator

我正在处理以下代码:

// $data has only one dimension AND at least one of its values start with a "@"
if ( (count($data) == count($data, COUNT_RECURSIVE))
  && (count(preg_grep('~^@~', $data)) > 0) )
{
    // do nothing
}

else
{
    // do something
}

这个条件的逻辑运行得很好,但是,如果我只能在第一个条件产生真值的情况下评估第二个条件时,我更愿意摆脱空if块 - 否则{{1当preg_grep()包含多个维度时,call会抛出以下通知:

  

注意:数组到字符串转换

我知道我可以使用错误抑制运算符或其他一些 hacky 方法,但我觉得我错过了一些微不足道的东西。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:3)

首先,显而易见的方式:

if (!( (count($data) == count($data, COUNT_RECURSIVE))
    && (count(preg_grep('~^@~', $data)) > 0)) )
{
    // everything is cool, nothing to do
}

else
{
    // do something
}

其次,正确方式

if ((count($data) < count($data, COUNT_RECURSIVE))
 || (count(preg_grep('~^@~', $data)) == 0))
{
    // everything is cool, nothing to do
}

else
{
    // do something
}

答案 1 :(得分:2)

if (!((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0)))

{     // 做一点事 }

答案 2 :(得分:2)

if (! (
   count($data) == count($data, COUNT_RECURSIVE) && 
   count(preg_grep('~^@~', $data)) > 0
   )

包裹整组条件并坚持下去!在开始时。换行是为了便于阅读。我也删除了各个条件周围的不必要的()。

答案 3 :(得分:1)

我并不完全清楚你在问什么,但我认为你想要:

// $data has only one dimension AND at least one of its values start with a "@"
if (!((count($data) == count($data, COUNT_RECURSIVE))
  && (count(preg_grep('~^@~', $data)) > 0)))
{
    // do something
}

这样,如果((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0))为假,则执行该块。