0
<? foreach ($cases as $case) :?>
<? if (isset($case['case_status']) && ($case['case_status'] == 'Incomplete')) :?>
<div>
    <div class="alert alert-error">    
        <?= $warning ?>
    </div>

条件が満たされた場合、 foreach が div を1回だけ出力するようにしようとしています。問題は、条件を満たすすべてのケースで div が出力されることです。

in_array を使用してみましたが、構文がわかりません。in_array は正しいですか? これを行うより良い方法はありますか?

4

2 に答える 2

1

フラグを使用して、既に div を印刷したことをマークし、if に追加の条件を追加できます。

<? 
$flag = false;
foreach ($cases as $case) :?>
<? if (isset($case['case_status']) 
       && ($case['case_status'] == 'Incomplete')
       && ($flag == false)) :?>
<div>
    <div class="alert alert-error">    
        <?= $warning ?>
    </div>
    <?php $flag = true; ?>

または、そのループで何もする必要がない場合は、最初に遭遇した要素の後でループを中断することができます。

<? 
foreach ($cases as $case) :?>
<? if (isset($case['case_status']) && ($case['case_status'] == 'Incomplete')) :?>
<div>
    <div class="alert alert-error">    
        <?= $warning ?>
    </div>
    <?php break; ?>
于 2013-08-12T22:54:43.717 に答える
1
<?php
  $printed = array();
  foreach ($cases as $case) :?>
<? if (!in_array( $case['case_status'] ) && isset($case['case_status']) && ($case['case_status'] == 'Incomplete')) : ?>
<div>
    <div class="alert alert-error">    
        <?= $warning ?>
    </div>
<?php
    $printed[] = $case['case_status'];
  endif;
?>

このようにして、出力されたすべての case_status を保存し、in_array と比較します。

于 2013-08-12T22:56:46.980 に答える