PHP有没有更好的方法来编写这个if + ternary函数?

问题描述 投票:2回答:5

基本上它只是在两个值之间切换。如果我输入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;
}

这是我实际使用的函数的简化版本,因此无需问我为什么需要它。我尝试了它和数组,但它不起作用,因为我将输入其他需要输出而不改变的数字。它需要输入所有数字和字母,但只能更改函数中的数字和字母,其他则应该不受影响。

预期产出。

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

所以我基本上寻找一种更简单的方法来编写这个函数(如果有的话)。对我来说它看起来很难看,但如果没有更好的方法就没关系。

编辑:编辑添加一个额外的条件,因为我没有意识到代码可能是一个或多个条件非常不同。实际代码有五个条件。

php function ternary
5个回答
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
投票

使用三元运算符:

// 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));
}

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

// 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

           );
}

1
投票

switch / case对我来说似乎是最具可读性的选择:

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'));

0
投票

根据用例,您应该能够使用str_replace()

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

0
投票
function change($val) {
    return $val == 6 ? "X" : ($val == "X" ? 6 : $val);
}
© www.soinside.com 2019 - 2024. All rights reserved.