1
votes

Comment obtenir les résultats de plus d'une condition à la fois

Je ne sais même pas comment poser ma question!

J'ai une variable comme celle-ci:

switch (false){
     case $value['state 1']:
        $message .= "State one isn't working!\n";
     case $value['state 2']:
        $message .= "State two isn't working!\n";
     case $value['state 3']:
        $message .= "State three isn't working!\n";
     case $value['state 4']:
        $message .= "State four isn't working!\n";
        break;
     default:
        $message = "All states works!";
        break;
}

Je veux garder des chaînes sur chaque état qui a false valeur par conditions ou autre chose et si tous les états ont une valeur true , ont une autre chaîne, par exemple:

$message = "";
if ($value['state 1'] !== true){
     $message .= "State one isn't working!\n";
} elseif ($value['state 2'] !== true){
     $message .= "State two isn't working!\n";
} elseif ($value['state 3'] !== true){
     $message .= "State three isn't working!\n";
} elseif ($value['state 4'] !== true){
     $message .= "State four isn't working!\n";
} else {
$message = "All states works!";
}

Dans ce code, après la première condition vraie, les autres conditions ne sont pas vérifiées, j'ai donc utilisé switch case de cette façon:

$value['state 1'] = true;
$value['state 2'] = false;
$value['state 3'] = false;
$value['state 4'] = true;

Dans ce code après avoir mis en correspondance le premier cas, toutes les chaînes après ce cas seront ajoutées à la variable $ message!

Eh bien, je pense que maintenant vous savez ce que je veux faire! pouvez-vous m'aider, s'il vous plaît?


0 commentaires

3 Réponses :


5
votes

Séparez-les et à la fin vérifiez votre variable $ message :

$message = "";
if ($value['state 1'] !== true){
     $message .= "State one isn't working!\n";
}
if ($value['state 2'] !== true){
     $message .= "State two isn't working!\n";
}
if ($value['state 3'] !== true){
     $message .= "State three isn't working!\n";
}
if ($value['state 4'] !== true){
     $message .= "State four isn't working!\n";
}
if (!$message) {
$message = "All states works!";
}


1 commentaires

merci, cela fonctionne bien comme je le savais, je pensais qu'il y avait d'autres moyens, mais en utilisant une instruction if séparée.



2
votes

Si vous voulez vérifier tous les indices de tableau, vous pouvez utiliser quelque chose comme ceci

$value = [
    'state_1' => [
        'is_work' => false,
        'error_text' => "State 1 isn't working!\n"
    ],
    'state_2' => [
        'is_work' => true,
        'error_text' => "State 2 isn't working!\n"
    ],
    'state_3' => [
        'is_work' => true,
        'error_text' => "State 3 isn't working!\n"
    ]
];

$message = "";

foreach ($value as $arr) {
    if ($arr['is_work'] !== true) {
        $message .= $arr['error_text'];
    }
}

if ("" === $message){
    $message = "All states works!";
}

echo $message;

Ou, si vous changez votre tableau, vous pouvez utiliser une boucle et vous n'aurez pas besoin d'écrire le 100500 sur if (...)

Est la réalisation de la boucle:

if ($value['state 1'] !== true){
     $message .= "State one isn't working!\n";
} 

if ($value['state 2'] !== true){
     $message .= "State two isn't working!\n";
} 

if ($value['state 3'] !== true){
     $message .= "State three isn't working!\n";
} 

if ($value['state 4'] !== true){
     $message .= "State four isn't working!\n";
} 

if (!$message) {
    $message = "All states works!";
}

Sortie: L'état 1 ne fonctionne pas!


6 commentaires

$ arr ['is_work'] === true vous donne un message d'erreur et ("" === $ message) identique à (! $ message ) . Vous avez échoué


merci de m'avoir donné votre temps, j'ai utilisé ce code avant, je pensais à ne pas utiliser d'instructions if séparées, et à propos de la boucle, je dois dire que je ne peux pas utiliser la boucle parce que je veux donner à chaque état une chaîne détaillée, pas seulement numéros comme ces codes ici.


@MohammadHoodaji La chaîne d'erreur, dans cette implémentation, peut être stockée avec l'état. J'ai changé pour le rendre plus clair sandbox.onlinephpfunctions.com/code/…


@aksen Vous avez échoué est un peu dur, vous ne pensez pas? Continuez votre bon travail :-)


@jibsteroos, je ne suis pas d'accord pour encourager les réponses avec des problèmes intégrés.


@AlexeyBril Oui, ça a l'air sympa, merci pour votre aide



3
votes

Vous devriez vraiment utiliser une boucle, pour permettre une expansion facile des conditions dans le futur:

<?php
$value['state 1'] = true;
$value['state 2'] = false;
$value['state 3'] = false;
$value['state 4'] = true;

$message = null;
foreach($value as $key => $state) {
    if($state !== true) {
        $message .= $key . " isn't working!\n";
    }
}
echo $message ?? 'all states working'; // null-coalescing (PHP 7+)

//If your php version is older you can echo the message using a regular ternary expression:
print $message ? $message : 'all states working';

démo


2 commentaires

Il est à noter que ?? '' est exclusif (ternaire) à PHP 7+


Je ne peux pas utiliser la boucle pour cela, car les états ont leurs propres noms dans mon code principal et je veux leur donner des chaînes détaillées, j'ai utilisé des nombres ici juste pour avoir des titres courts.