0

だから私は次のコードを持っています:

$colors=$ex->Get_Color("images/avatarimage3.png", $num_results, $reduce_brightness, $reduce_gradients, $delta);
foreach ( $colors as $hex => $count )
{
    if ($hex == 'e6af23' && $count > 0.05) 
    { 
        echo "The image has the correct colour"; 
    } 
    else 
    { 
        echo "The image doesn't have the correct colour"; 
    }
}

基本的に、このコードは現在、画像に含まれる色の16進値とパーセンテージを取得し、それらを配列に追加します。上記のコードは、16 進数が特定の値であり、パーセントが 5% を超えているかどうかを確認し、そうである場合は成功メッセージを表示します。この部分は、本来あるべきとおりに機能します。

ここで、私が望んでいるのは、色が正しくない場合、 $hex == 'e6af23' 以外の配列内の他のすべての 16 進数値に対して、失敗メッセージを表示したいが、一度だけ表示し、 16進数がその値ではないたびに。

基本的に、失敗メッセージが5回ではなく1回だけ表示されるようにする必要があります(画像の16進数の色の数)。

4

3 に答える 3

2

フラグを使用して、メッセージが出力されたかどうかを示すことができます。出力された場合は、再度出力しないでください。

$colors=$ex->Get_Color("images/avatarimage3.png", $num_results, $reduce_brightness, $reduce_gradients, $delta);
$error_displayed = false;
foreach ( $colors as $hex => $count ) {
    if ($hex == 'e6af23' && $count > 0.05) {
        echo "The image has the correct colour";
    } else if (!$error_displayed) {
        echo "The image doesn't have the correct colour";
        $error_displayed = true;
    }
}
于 2012-08-19T12:18:29.983 に答える
0

すでにエコーした色のリストを保持するだけです。

$failed = array();

forech ($colors as $hex) {
    if (!in_array($hex, $failed) && $error) {
        echo 'Failed at hex ' . $hex;
        $failed[] = $hex;
    }
}
于 2012-08-19T12:18:21.370 に答える
0

NewFurnitureRay の回答をガイドラインとして使用して、この回答を思いつきました。

$colors=$ex->Get_Color("images/avatarimage.png", $num_results, $reduce_brightness, $reduce_gradients, $delta);
$success = true;
foreach ( $colors as $hex => $count ) {
if ($hex !== 'e6af23') {$success = false; }
if ($hex == 'e6af23' && $count > 0.05) {$success = true; break;}
}

if ($success) { echo "Success"; } else { echo "This is a failure"; }

配列内の成功の位置に関係なく、成功または失敗のいずれかのみを表示する必要があるため、現在は機能しているようです:)

于 2012-08-19T12:40:57.270 に答える