【问题标题】:PHP operators problemsPHP 运算符问题
【发布时间】:2014-02-05 23:16:34
【问题描述】:

我正在构建一个 PHP 脚本。从一种形式我得到min_salary 和max_salary。我试图将它们都作为工资变量中的字符串,例如

$salary = "min_salary TO max_salary";

如果未指定最低薪水,则应设置为0,同样,如果未指定最高薪水,则应将其设置为*。

我已经编写了以下代码,但是当没有提供任何一个字段时,我什么也得不到。

$salary = (isset($data['min_salary']) ? $data['min_salary'] : 0) .' TO '. (isset($data['max_salary']) ? $data['max_salary']:'*');

我也不想使用if then else 语句。

【问题讨论】:

  • 代码对我来说看起来不错,“我已经编写了以下代码,但在未提供任何字段时什么都没有得到”是什么意思。 - 输出什么 var_dump($salary)
  • 假设 min_salary 输入框为空白,max_salary 为 10,那么输出应该是“0 TO 10”但我只得到“TO 10”:(
  • 方法“isset”和“empty”之间存在差异 - 请注意这一点。如果要检查是否为空,请将 "isset(.." 替换为 "!empty(..."
  • 您已经在使用 if-else 语句。您是否尝试将 min_salary 变量转换为整数?
  • 感谢 Flixer,您的答案工作正常,只需将 isset 替换为 !empty

标签: php if-statement operators ternary


【解决方案1】:

这一行将在不使用 if/else 语句的情况下生成该代码(即使三元运算符实际上是 if/else 语句周围的语法糖)

$salary = max(0,$data['min_salary']) . ' TO ' . ($data['max_salary'] > 0 ? $data['max_salary'] : '*');

您并不真正希望两个值使用相同的脚本,因为一个应该回退到0,另一个回退到*。 isset()的问题:

(isset($data['min_salary']) ? $data['min_salary'] : 0)

是一个变量可以设置为一个空字符串$data = '',这将返回true。我敢说你不想让这种情况发生。

【讨论】:

  • 对,这可能是正确的另一种选择。但我得到了答案,感谢您的帮助。
【解决方案2】:

感谢 Flixer 和 Felix 的回答,在我用 !empty 替换 isset 后它工作正常

$salary = (!empty($data['min_salary']) ? $data['min_salary'] : 0).' TO '. (!empty($data['max_salary']) ? $data['max_salary']:'*');

【讨论】:

    【解决方案3】:

    将值转换为 int:

    $salary = (isset($data['min_salary']) ? (int)$data['min_salary'] : 0).' TO '...
    

    第二部分也是如此……

    【讨论】:

    • 谢谢,但没用。无论如何,我从 Flixer 得到了答案。
    【解决方案4】:

    您的语句有效并提供了一个字符串,它在我的 php 服务器 (php 5.3.7) 上按原样工作,$data 未定义或未定义且仅包含一个值。

    也许是你使用 $salary 的方式有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2011-03-21
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多