0

Je travaille sur le code suivant:logique et l'état Inversion

// $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 
} 

La logique de cette condition fonctionne très bien, mais je préférerais si je pouvais me débarrasser du bloc if vide tout en évaluant la deuxième condition que si le premier vrai donne - sinon l'appel preg_grep() lancera l'avis suivant lorsque $data a plus d'une dimension:

avis: Array à la conversion de chaîne

Je sais que je pourrais utiliser l'opérateur de suppression d'erreur ou d'autres aki approches, mais j'ai le sentiment que je manque quelque chose trivial. Quelqu'un peut m'aider s'il vous plaît?

+0

'&&' est déjà en court-circuit ... n'est-ce pas? – Ryan

Répondre

3

D'abord, de façon évidente:

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

else 
{ 
    // do something 
} 

Deuxièmement, correcte façon

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

else 
{ 
    // do something 
} 
+0

Évidemment, merci! :) –

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

{// faire quelque chose }

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

Wrap l'ensemble du groupe de conditions et le bâton! au début. Les sauts de ligne sont pour la lisibilité. J'ai enlevé le inutile() autour des conditions individuelles aussi bien.

+0

Merci, j'utilise si rarement cet opérateur que parfois j'oublie même qu'il existe. –

1

Je ne suis pas tout à fait clair ce que vous demandez, mais je pense que vous voulez:

// $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 
} 

Avec ceci, le bloc s'exécute si ((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0)) est faux.