PHP有什么更好的方法来编写if +三元函数?

时间:2019-03-06 09:37:59

标签: php function ternary

基本上,它只是在两个值之间切换。如果输入X,则得到6;如果输入6,则得到X。如果输入其他任何值,则值将保持不变。

function change($val) {
  if ($val == "X" || $val == 6) { $val = $val=="X" ? 6 : "X"; } else
  if ($val == "J" || $val == 3) { $val = $val=="J" ?  3 : "J"; }
  return $val;
}

这是我实际上使用的函数的简化版本,因此无需询问为什么需要它。我将其作为and数组进行了尝试,但由于我将输入其他需要输出而无需更改的数字,因此它不起作用。它需要输入所有数字和字母,但只能更改功能中的数字和字母,其他字符应保持不变。

预期的输出。

change(6)
X
change(8)
8
change(X)
6
change(L)
L
change(3)
J

所以我基本上是在寻找一种更简单的方法来编写此函数(如果有)。在我看来,这看起来很丑陋,但是如果没有更好的方法,那就很好。

编辑:编辑以添加其他条件,因为我没有意识到代码对于一个或多个条件可能会非常不同。您看到的实际代码有五个条件。

5 个答案:

答案 0 :(得分:5)

如果您使用的是PHP> 7.0,则可以使用此解决方案:

function change($val)
{
    return [6 => 'X', 'X' => 6][$val] ?? $val;
}

对于较低版本,它可能像:

function change($val)
{
    $changes = [6 => 'X', 'X' => 6];

    return isset($changes[$val]) ? $changes[$val] : $val;
}

答案 1 :(得分:1)

使用三元运算符:

// Return 6 if $val is 'X'
// Return 'X' if $val is 6
// Return same if $val is not 'X' and 6
function change($val) {
    return (($val == "X") ? 6 : ($val == 6 ? 'X' : $val));
}

在其中添加新的(第3个)条件:

// Return 6 if $val is 'X'
// Return 'X' if $val is 6
// Return 3 if $val is 'J'
// Return 'J' if $val is 3
// Return same if $val is not 'X' and 6
function change($val) {
    return ($val == "X") ? 6 : 
               ($val == 6 ? 'X' : 
                   ($val == 'J') ? 3 :
                       ($val == 3) ? 'J' : 
                           $val

           );
}

答案 2 :(得分:1)

对于我来说,开关/盒似乎是最易读的选项:

https://3v4l.org/VD31E

<?php

function change($input) {
    switch($input) {
        case 'X':
            return 6;  
        case 6:
            return 'X';
        default: 
            return $input;
    }
}

var_dump(change(6));
var_dump(change('X'));
var_dump(change('something_else'));

7.1.25-7.3.2的输出

  

string(1)“ X”

     

int(6)

     

string(14)“ something_else”


如果您不喜欢函数中的多个return语句,则可以对其进行重构:

https://3v4l.org/V722p

<?php

function change($input) {
    $return = $input;
    switch($input) {
        case 'X':
            $return = 6; 
            break;
        case 6:
            $return = 'X';
            break;
    }

    return $return;
}

var_dump(change(6));
var_dump(change('X'));
var_dump(change('something_else'));

答案 3 :(得分:0)

根据用例,您应该可以使用str_replace()

$string = str_replace([6, 'X'], ['X', 6]);

答案 4 :(得分:0)

function change($val) {
    return $val == 6 ? "X" : ($val == "X" ? 6 : $val);
}