【问题标题】:Show different output depending on if value is greater than, less than, or equal to zero根据值是否大于、小于或等于零显示不同的输出
【发布时间】:2013-12-19 16:59:59
【问题描述】:

我正在从我的数据库中获取一个整数值,它可能是正数、负数或零。

我想使用 FontAwesome 的字体图标根据与零相关的值显示一个图标。

  • 如果结果> 0,我想用icon-caret-up显示结果。
  • 如果结果= 0,我想用icon-caret-right显示结果。
  • 如果结果< 0,我想用icon-caret-down显示结果。

所以我添加了以下 php 代码:

$reponse=mysql_query("My SQL Query");

if ($reponse > 0) {
    echo "<h1 class=\"uk-text-center uk-margin-bottom-remove\">".(mysql_result($reponse, 0))."<i class=\"uk-icon-caret-up\"></i></h1>";
}
elseif ($reponse == 0) {
    echo "<h1 class=\"uk-text-center uk-margin-bottom-remove\">".(mysql_result($reponse, 0))."<i class=\"uk-icon-caret-up\"></i></h1>";
}
else {
    echo "<h1 class=\"uk-text-center uk-margin-bottom-remove\">".(mysql_result($reponse, 0))."<i class=\"uk-icon-caret-down\"></i></h1>";
}

无论结果如何,即使它是负数或等于零,我也只有第一选择显示icon-caret-up

【问题讨论】:

    标签: php integer conditional-statements comparison font-awesome


    【解决方案1】:

    首先,mysql_*函数已经废弃,新开发需要使用PDO或者MySQLi。

    其次,正如文档所述,mysql_query 返回一个资源。 http://php.net/mysql_query 该页面上有很多如何使用它的示例。

    执行查询后,您必须获取一行。 (编辑:我看到您已经知道这一点,因为您在下一行使用 mysql_result 进行操作 - 您只需要在尝试进行比较之前使用它。)

    $row = mysql_fetch_assoc($reponse) 然后$row 将是一个值数组。由于您没有显示您选择的实际字段名称,我无法告诉您下一步该做什么,但请阅读文档。

    现在,一旦您获得了该代码集,就可以大大简化 HTML 的打印。

    $amount = mysql_result($reponse, 0);
    
    if($amount > 0){
        $caret = 'up';
    }else if($amount == 0){
       $caret = 'right';
    }else{
       $caret = 'down';
    }
    echo '<h1 class="uk-text-center uk-margin-bottom-remove">'.$amount.'<i class="uk-icon-caret-'.$caret.'"></i></h1>';
    

    最后一行也可以是echo "&lt;h1 class=\"uk-text-center uk-margin-bottom-remove\"&gt;{$amount}&lt;i class=\"uk-icon-caret-{$caret}\"&gt;&lt;/i&gt;&lt;/h1&gt;"; 但我个人觉得转义引号很烦人。所以我换了。

    【讨论】:

    • 它就像一个魅力。顺便说一句,非常感谢您的建议,我是 php 的新手,所以我正在学习基本概念,即使它已被弃用。这只是切换到 PDO 和 php 框架之前的第一步。再次感谢大家。问候!
    【解决方案2】:

    也许不是一个条件块,而是为您的三向比较建立一个查找数组。 spaceship 运算符只能返回 -1、0 或 1,因此您的查找只需将这些整数转换为单词。

    为避免混乱的连接/插值,您可以在模板字符串中使用占位符并调用 printf() 来显示您的内容。

    代码:(Demo)

    $lookup = [
        -1 => 'down',
        0 => 'right',
        1 => 'up',
    ];
    
    foreach ([13, 0, -5] as $amount) {
        printf(
            '<h1 class="uk-text-center uk-margin-bottom-remove">
                %s
                <i class="uk-icon-caret-%s"></i>
             </h1>',
            $amount,
            $lookup[$amount <=> 0]
        );
        echo "\n---\n";
    }
    

    输出:

    <h1 class="uk-text-center uk-margin-bottom-remove">13<i class="uk-icon-caret-up"></i></h1>
    ---
    <h1 class="uk-text-center uk-margin-bottom-remove">0<i class="uk-icon-caret-right"></i></h1>
    ---
    <h1 class="uk-text-center uk-margin-bottom-remove">-5<i class="uk-icon-caret-down"></i></h1>
    ---
    

    由于 spaceship 运算符被限制为 3 个不同的返回值,因此您的查找将需要保持其当前大小(没有收缩/扩展的空间)。这意味着您可以根据自己的喜好直接将查找有效负载写入printf() 的第三个参数而不声明$lookup ...我意识到一些开发人员会认为这不那么有吸引力/可读性。

    printf(
        '<h1 class="uk-text-center uk-margin-bottom-remove">
             %s
             <i class="uk-icon-caret-%s"></i>
         </h1>',
        $amount,
        [-1 => 'down', 0 => 'right', 1 => 'up'][$amount <=> 0]
    );
    

    在 PHP8 中,您可能会发现 match() 是一种有价值的技术——它可以使您的代码保持简洁,并允许您轻松修改超过 3 个单词的翻译。

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 2011-01-25
      • 1970-01-01
      • 2017-12-10
      • 2012-10-22
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多