Php 逆逻辑与条件

Php 逆逻辑与条件,php,arrays,multidimensional-array,if-statement,conditional-operator,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

我正在编写以下代码:

// $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
块,前提是第一个条件为true,否则
preg_grep()
调用将在
$data
具有多个维度时抛出以下通知:

注意:数组到字符串的转换

我知道我可以使用错误抑制操作符或其他一些黑客方法,但我觉得我遗漏了一些琐碎的东西。有人能帮我吗

if (!((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0)))
{ //做点什么 }

包装整个条件组并粘贴!一开始。换行符是为了可读性。我也删除了个别条件周围不必要的()。

首先,显而易见的方法:

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

else
{
    // do something
}
第二,正确的方法

if((count($data)
我不完全清楚你在问什么,但我认为你想要:

// $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\u RECURSIVE))&(count(preg\u grep(“~^@~”,$data))>0))
为false,则执行块。

&
已短路。。。不是吗?谢谢,我很少使用这个操作符,有时甚至忘记了它的存在。
if ((count($data) < count($data, COUNT_RECURSIVE))
 || (count(preg_grep('~^@~', $data)) == 0))
{
    // everything is cool, nothing to do
}

else
{
    // do something
}
// $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
}