我正在处理以下代码:
// $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 时才评估第二个条件 - 否则当$data
有多个维度时,preg_grep()
调用将引发以下通知:
注意:数组到字符串的转换
我知道我可以使用错误抑制运算符或其他一些黑客方法,但我感觉我错过了一些微不足道的东西。有人可以帮助我吗?
首先,显而易见的方式:
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
}
if (!((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0)))
{ 做点什么}
if (! (
count($data) == count($data, COUNT_RECURSIVE) &&
count(preg_grep('~^@~', $data)) > 0
)
将整组条件包裹起来,并在开始时坚持!换行符是为了便于阅读。我也删除了个别条件周围不必要的()。
完全清楚你在问什么,但我认为你想要:
// $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))
为假,则块执行。