Инвертирование логики и состояния - PullRequest
0 голосов
/ 09 мая 2011

Я работаю над следующим кодом:

// $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 имеет более одного измерения:

Примечание : преобразование массива в строку

Я знаю, что мог бы использовать оператор подавления ошибок или другие хакерские подходы, но у меня такое ощущение, что я упускаю что-то тривиальное. Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 4 ]

3 голосов
/ 09 мая 2011

Первый, очевидный способ:

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
}
2 голосов
/ 09 мая 2011
if (! (
   count($data) == count($data, COUNT_RECURSIVE) && 
   count(preg_grep('~^@~', $data)) > 0
   )

Оберните всю группу условий и придерживайтесь! в начале. Разрывы строк предназначены для удобства чтения. Я удалил ненужные () и для отдельных условий.

2 голосов
/ 09 мая 2011
if (!((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0)))

{// сделать что-то}

1 голос
/ 09 мая 2011

Мне не совсем понятно, о чем вы спрашиваете, но я думаю, что вы хотите:

// $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)) равно false.

...