基本上它只是在两个值之间切换。如果我输入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> 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;
}
使用三元运算符:
// 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
);
}
switch / case对我来说似乎是最具可读性的选择:
<?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语句,你也可以重构它:
<?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'));
根据用例,您应该能够使用str_replace()。
$string = str_replace([6, 'X'], ['X', 6]);
function change($val) {
return $val == 6 ? "X" : ($val == "X" ? 6 : $val);
}