基本上,它只是在两个值之间切换。如果输入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
所以我基本上是在寻找一种更简单的方法来编写此函数(如果有)。在我看来,这看起来很丑陋,但是如果没有更好的方法,那就很好。
编辑:编辑以添加其他条件,因为我没有意识到代码对于一个或多个条件可能会非常不同。您看到的实际代码有五个条件。
答案 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)
对于我来说,开关/盒似乎是最易读的选项:
<?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'));
答案 3 :(得分:0)
根据用例,您应该可以使用str_replace()。
$string = str_replace([6, 'X'], ['X', 6]);
答案 4 :(得分:0)
function change($val) {
return $val == 6 ? "X" : ($val == "X" ? 6 : $val);
}