gpt4 book ai didi

改变字体颜色的 if 语句的 PHP 多个条件

转载 作者:行者123 更新时间:2023-12-02 06:56:07 24 4
gpt4 key购买 nike

我在使用这段 PHP 代码时遇到了一些问题:

 // HIGHLIGHT NUMBERS *************************************************
// BUY
$valueEnlightOverBuy = $_POST["enlightOverBuy"];
$valueEnlightUnderBuy = $_POST["enlightUnderBuy"];

// GREEN PRICE BUY
$fontColorBuy = "#FFF";

if ((($valueEnlightOverBuy != '') or ($valueEnlightUnderBuy != '')) and (($valueEnlightOverBuy and $valueEnlightUnderSell) != "0")) {
if (($finalPriceBuyer >= $valueEnlightOverBuy) or ($finalPriceBuyer <= $valueEnlightUnderBuy)) {
$fontColorBuy = "#00FF00";
} else if (($finalPriceBuyer >= $valueEnlightOverBuy and $finalPriceBuyer <= $valueEnlightUnderBuy)) {
$fontColorBuy = "#FF00FF";
} else {
$fontColorBuy = "#D00000";
}};

// SELL LOCAL
$valueEnlightOverSloc = $_POST["enlightOverSloc"];
$valueEnlightUnderSloc = $_POST["enlightUnderSloc"];

// GREEN PRICE SELL LOCAL
$fontColorSellLoc = "#FFF";

if ((($valueEnlightOverSloc != '') or ($valueEnlightUnderSloc != '')) & (($valueEnlightOverSloc & $valueEnlightUnderSloc) != "0")) {
if (($finalPriceSellerLocal >= $valueEnlightOverSloc) or ($finalPriceSellerLocal <= $valueEnlightUnderSloc)) {
$fontColorSellLoc = "#00FF00";
} else if (($finalPriceSellerLocal >= $valueEnlightOverSloc) and ($finalPriceSellerLocal <= $valueEnlightUnderSloc)) {
$fontColorSellLoc = "#FF00FF";
} else {
$fontColorSellLoc = "#D00000";
}};

// SELL INTERNATIONAL
$valueEnlightOverSellInt = $_POST["enlightOverSellInt"];
$valueEnlightUnderSellInt = $_POST["enlightUnderSellInt"];

// GREEN PRICE SELL INTERNATIONAL
$fontColorSellInt = "#FFF";

if ((($valueEnlightOverSellInt != '') or ($valueEnlightUnderSellInt != '')) & (($valueEnlightOverSellInt & $valueEnlightUnderSellInt) != "0")) {
if (($finalPriceSellerInt >= $valueEnlightOverSellInt) or ($finalPriceSellerInt <= $valueEnlightUnderSellInt)) {
$fontColorSellInt = "#00FF00";
} else if (($finalPriceSellerInt >= $valueEnlightOverSellInt) and ($finalPriceSellerInt <= $valueEnlightUnderSellInt)) {
$fontColorSellInt = "#FF00FF";
} else {
$fontColorSellInt = "#D00000";
}};

如您所见,我有一个 post 表单(未在代码中显示)将以下值传输到此文件:VAR underBuy < BUY PRICE < VAR overBuy; VAR underLocalSeller < LOCAL SELL PRICE < VAR overLocalSeller; VAR underIntSeller < INT SELL PRICE < VAR underIntSeller.

首先代码进行检查如果从表单收到的 VAR 为 EMPTY 或 = 为 0;如果不是,该代码收集所有这些数据并检查前两个 VAR 的 $FINALPRICEBUYER(从带有 json 的文件中提取),然后检查 $FINALPRICESELLERLOCAL 的第 3 个和第 4 个 VAR,因此检查 $FINALPRICESELLERINT第 5 和第 6 个 VAR。

如果 $FINALPRICEBUYER 介于 >= 比第一个 VAR 或 <= 比第 2 个 VAR 使字体变为绿色,否则如果 $FINALPRICEBUYER 在第 3 个 VAR 和第 4 个 VAR 之间变为 VIOLET,否则去红色。

$FINALPRICESELLERLOCAL 和 $FINALPRICESELLERINT 相同。

我做了前两个条件,因为用户可以插入一个或两个价格限制。

您能帮助我了解我做错了什么吗? (也许这只是一个逻辑问题)。

这里是问题:

此代码无效。很多时候它返回绿色字体,尽管它是紫色的,所以数学符号(当然是 PHP 代码)的逻辑结构中应该有一些我无法理解的东西......

2015 年 6 月 29 日更新

这是我正在使用和改编的代码,从您的示例开始。

// ENLIGHT NUMBERS ***************************************************

// get all input variables at once
$over_buy = $_POST['enlightOverBuy'];
$under_buy = $_POST['enlightUnderBuy'];
$over_loc = $_POST['enlightOverSloc'];
$under_loc = $_POST['enlightUnderSloc'];
$over_int = $_POST['enlightOverSellInt'];
$under_int = $_POST['enlightUnderSellInt'];

$final_buy = $finalPriceBuyer;
$final_loc = $finalPriceSellerLocal;
$final_int = $finalPriceSellerInt;

// now set the colors
$buy = getFontColor( $over_buy, $under_buy, $final_buy );
$loc = getFontColor( $over_loc, $under_loc, $final_loc );
$int = getFontColor( $over_int, $under_int, $final_int );

所以这里没有什么不同。现在的功能:

 // function to return color based on input
function getFontColor( $over, $under, $final ) {

// colors
$white = '#fff';
$green = '#0f0';
$violet = '#f0f';
$red = '#d00000';

第一步:如果函数得到“0”数字字体将是白色的:

 if ($final != '0') {

第二步:如果两个“值”都由表单发送

     if (!empty($over) and !empty($under)) {

第三步:如果FINAL是介于over和under之间的数

           if ($final >= $over && $final <= $under) {

走向绿色

                  return $green;

如果没有

           } else {

变红

           return $red; 
}

第四步:else if其中一个“值”,或者另一个为空

 } else if (!empty($over) or !empty($under)) {

第五步:如果FINAL是一个高于“over”值或低于“under”值的数

        if ($final >= $over or $final <= $under) {

走向绿色

                return $green;

否则变红

        } else {
return $red;
}

第六步:在任何其他情况下,变白

 } else {
return $white;
}
}};

因此,如果 $final 介于从表单收到的两个值之间,我将获得绿色,但如果您只有一个值输入(因此低于或高于),如果 $final 高于高于或低于低于,则变为绿色。在任何其他情况下,如果 $final 不为“0”,则转为红色。

完整代码如下:

// ENLIGHT NUMBERS ***************************************************

// get all input variables at once
$over_buy = $_POST['enlightOverBuy'];
$under_buy = $_POST['enlightUnderBuy'];
$over_loc = $_POST['enlightOverSloc'];
$under_loc = $_POST['enlightUnderSloc'];
$over_int = $_POST['enlightOverSellInt'];
$under_int = $_POST['enlightUnderSellInt'];

$final_buy = $finalPriceBuyer;
$final_loc = $finalPriceSellerLocal;
$final_int = $finalPriceSellerInt;

// now set the colors
$buy = getFontColor( $over_buy, $under_buy, $final_buy );
$loc = getFontColor( $over_loc, $under_loc, $final_loc );
$int = getFontColor( $over_int, $under_int, $final_int );

// function to return color based on input
function getFontColor( $over, $under, $final ) {

// colors
$white = '#fff';
$green = '#0f0';
$violet = '#f0f';
$red = '#d00000';

if ($final != '0') {
if (!empty($over) and !empty($under)) {
if ($final >= $over && $final <= $under) {
return $green;
} else {
return $red;
}
} else if (!empty($over) or !empty($under)) {
if ($final >= $over or $final <= $under) {
return $green;
} else {
return $red;
}
} else {
return $white;
}
}};

这对我来说似乎是正确的,但我收到了一个奇怪的结果,您将看到的 echo 是由我创建的,用于检查功能行为。

1st example return

2nd example return

3rd example return

4th example return

请不要考虑我的意大利语评论,但结果是胡说八道,考虑到:

  • 第一个例子:绿色(0.127839 不低于 0.125,所以应该是红色)红色(正确)- 绿色(正确)
  • 第二个例子:绿色(0.154761 不低于 0.125,所以应该是红色)- 红色(正确)- 绿色(正确)
  • 第三个例子:绿色(0.14442 不低于 0.125,所以应该是红色)- 红色(正确)- 绿色(正确)
  • 第 4 个示例:绿色(0.129195 不低于 0.125,因此应该是红色)- 红色(正确)- 红色(正确)。

怎么可能使用相同的函数,您在第一次使用时总是出错,而在接下来的 2 次使用中总是得到正确答案?

最终更新

代码如下:

 $over_buy  = number_format($_POST['enlightOverBuy'], 6);
$under_buy = number_format($_POST['enlightUnderBuy'], 6);
$over_loc = number_format($_POST['enlightOverSloc'], 6);
$under_loc = number_format($_POST['enlightUnderSloc'], 6);
$over_int = number_format($_POST['enlightOverSellInt'], 6);
$under_int = number_format($_POST['enlightUnderSellInt'], 6);


$final_buy = $finalPriceBuyer;
$final_loc = $finalPriceSellerLocal;
$final_int = $finalPriceSellerInt;

// now set the colors
$buy = getFontColor( $over_buy, $under_buy, $final_buy );
$loc = getFontColor( $over_loc, $under_loc, $final_loc );
$int = getFontColor( $over_int, $under_int, $final_int );


// function to return color based on input
function getFontColor( $over, $under, $final ) {

// colors
$white = '#fff';
$green = '#0f0';
$red = '#FF3300';

if ($final != '0') {
if (!empty($over) and !empty($under)) {
if ($final >= $over && $final <= $under) {
return $green;
} else {
return $red;
}
} elseif (!empty($over)) {
return ($final >= $over) ? $green : $red;
} elseif (!empty($under)) {
return ($final <= $under) ? $green : $red;
} else {
return $white;
}
}};

最佳答案

这里有很多事情要解决......

看来你可以好好阅读一下:

.

if (($finalPriceBuyer >= $valueEnlightOverBuy) or ($finalPriceBuyer <= $valueEnlightUnderBuy)) {
$fontColorBuy = "#00FF00";
} else if (($finalPriceBuyer >= $valueEnlightOverBuy and $finalPriceBuyer <= $valueEnlightUnderBuy)) { ... }

更重要的是,要懒惰和 DRY 。如果你做同样的事情两次,把它放到一个函数中:

function getColor($value, $limitOver, $limitUnder, $colors){
$underCheck = !is_numeric($limitUnder) || $value >= $limitUnder;
$overCheck = !is_numeric($limitOver) || $value <= $limitOver;
if ($underCheck && $overCheck) {
// all valid bounds are satisfied
return $colors['none'];
} else if ($overCheck){
// valid lower bound exists and is not satisfied
// and upper bound does not exist or is not valid or is satisfied
return $colors['under'];
} else if ($underCheck){
// valid upper bound exists and is not satisfied
// and lower bound does not exist or is not valid or is satisfied
return $colors['over'];
} else {
// both bounds exist and none of them are satisfied
return $colors['both'];
}
}

$colors = array (
'both' => "#FF00FF",
'over' => "#D00000",
'under' => "#FFF",
'none' => "#00FF00",
);

$colorBuy = getColor(
$finalPriceBuyer,
$_POST["enlightOverBuy"],
$_POST["enlightUnderBuy"],
$colors
);

$colorLocal = getColor(
$finalPriceSellerLocal,
$_POST["enlightOverSloc"],
$_POST["enlightUnderSloc"],
$colors
);

$colorInt = getColor(
$finalPriceSellerInt,
$_POST["enlightOverSellInt"];,
$_POST["enlightUnderSellInt"],
$colors
);

您对问题的定义并不十分清楚,因此您需要检查我是否正确解释了您的意图并进行必要的修改以满足您的确切需求,但您明白了。

关于改变字体颜色的 if 语句的 PHP 多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com