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"; 
    }
}

基本上,这段代码目前获取图像包含的十六进制值和颜色百分比,并将它们添加到数组中。上面的代码查看十六进制是否为某个值,百分比是否高于 5%,如果是,则显示成功消息。这部分完全按照它应该做的工作!

现在,我还想要的是,如果颜色不正确,那么对于数组中除 $hex == 'e6af23' 以外的所有其他十六进制值,我希望它显示一条失败消息,但只显示一次而不是每次十六进制不是那个值。

基本上我需要它,以便失败消息只显示一次而不是 5 次(图像中十六进制颜色的数量)。

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 回答