我正在处理以下代码:
// $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 方法,但我觉得我错过了一些微不足道的东西。有人可以帮帮我吗?
答案 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))
为假,则执行该块。