web-dev-qa-db-fra.com

Écho contenu à l'intérieur d'une seule fois

J'ai écrit le code PHP suivant, pour montrer un LI si le statut est défini sur Offline ou Delay:

<?php
    if(count($rows) > 0) {  
        foreach($rows as $row)
            {
                $service = $row->service;
                $details = $row->status_details;
                $status = $row->status;
                // status image check       
                    if($status == "ONLINE")
                    {
                        $symbol = "online.png";
                    }
                    if($status == "OFFLINE")
                    {
                        $symbol = "offline.png";
                    }
                    if($status == "DELAY")
                    {
                        $symbol = "delay.png";
                    }
        ?>

        <li class="<?php echo $status; ?>">
            <img src="<?php echo $moduleLoc, $symbol;?>" alt="Service Status <?php echo $service; ?>" /> <span class="details"><?php echo $details; ?></span></li>
        </li>
        <?php   

                }

        ?>
        <?php } ?>

En utilisant CSS, si la classe de "ONLINE" est alors affichée, alors LI est masqué.

Cependant, je souhaite ajouter une instruction à afficher si le statut est OFFLINE ou DELAY. J'ai écrit ce qui suit, qui fonctionne, mais en raison de l'instruction foreach, il est affiché pour chaque LI qui a soit OFFLINE, soit DELAY. Je veux qu'il ne soit montré qu'une fois:

<?php
    if(($status == "OFFLINE") || ($status == "DELAY")){
        echo '<li class="systemsGo"><img src="' . $moduleLoc . 'online.png" alt="Online Update" /><span class="details">All Other Applications Are Working Well</span></li>';   
    }
?>
2
RustyJoomla

Oui, j'ai mis au point une méthode.

Vous devez d’abord définir une variable sous forme de tableau:

$get_status = array();

Ensuite, dans la boucle foreach, vous devez combiner le statut de tous les résultats dans ce tableau nouvellement défini, comme suit:

foreach ($rows as $row)
{
    $get_status[] = $status;
}

Après la boucle foreach, vous devrez extraire le tableau, comme suit:

extract($get_status);

alors vous pouvez vérifier si tous les statuts du tableau sont tous identiques et afficher un message, comme ceci:

if (count(array_unique($get_status)) === 1 && end($get_status) === 'ONLINE')
{
    echo 'All systems are online';
}

Code complet et testé:

if (count($rows) > 0) 
{
    $get_status = array();

    foreach ($rows as $row)
    {
        $service = $row->service;
        $details = $row->status_details;
        $status  = $row->status;
        $symbol  = '';

        // status image check       
        if ($status == 'ONLINE')
        {
            $symbol = 'online.png';
        }
        if ($status == 'OFFLINE')
        {
            $symbol = 'offline.png';
        }
        if ($status == 'DELAY')
        {
            $symbol = 'delay.png';
        }

        $get_status[] = $status;
    ?>
        <li class="<?php echo $status; ?>">
            <img src="<?php echo $moduleLoc, $symbol;?>" alt="Service Status <?php echo $service; ?>" />
            <span class="details"><?php echo $details; ?></span>
        </li>

    <?php   
    }

    extract($get_status);

    if (count(array_unique($get_status)) === 1 && end($get_status) === 'ONLINE')
    {
        echo 'All systems are online';
    }
    else if (count(array_unique($get_status)) === 1 && end($get_status) === 'OFFLINE')
    {
        echo 'All systems are offline';
    }
    else if (count(array_unique($get_status)) === 1 && end($get_status) === 'DELAY')
    {
        echo 'All systems are delayed';
    }
    else
    {
        echo 'Not the same';
    }
}

J'espère que cela t'aides

P.S: J'ai apporté quelques modifications mineures, telles que le remplacement des guillemets doubles par des guillemets simples et également défini $symbol en dehors de vos déclarations if, insérez simplement le $status ne correspond pas (générera une erreur PHP sinon)

2
Lodder