如何在php中使用if-else语句将第二个数字替换为另一个数字?

如何在php中使用if-else语句将第二个数字替换为另一个数字?,php,arrays,if-statement,replace,Php,Arrays,If Statement,Replace,我有一个数字,用户将把它转换成一种形式-12位数字。每第二个数字都需要更换-如果该数字为: 1然后定为5 2然后把它变成1 3然后做6 4然后做2 5.然后改成7 6然后定为3 7那么就定为8 8然后定为4 0和9保持不变 例如: 343608111218最终将成为383307121417 这是我目前正在做的一个例子,但我认为它是冗长的。这只是第一个数字,所以我想我可以做点别的 $_POST['number'] = '343608111218'; preg_match_all('~(\d)~',

我有一个数字,用户将把它转换成一种形式-12位数字。每第二个数字都需要更换-如果该数字为: 1然后定为5 2然后把它变成1 3然后做6 4然后做2 5.然后改成7 6然后定为3 7那么就定为8 8然后定为4 0和9保持不变

例如: 343608111218最终将成为383307121417

这是我目前正在做的一个例子,但我认为它是冗长的。这只是第一个数字,所以我想我可以做点别的

$_POST['number'] = '343608111218';
preg_match_all('~(\d)~', $_POST['number'], $pregs);

if($pregs[1][1] === "1") {
$one = 5;
} 
elseif ($pregs[1][1] === "2"){
$one = 1;
}
elseif ($pregs[1][1] === "3"){
$one = 6;
}
elseif ($pregs[1][1] === "4"){
$one = 2;
}
elseif ($pregs[1][1] === "5"){
$one = 7;
}
elseif ($pregs[1][1] === "6"){
$one = 3;
}
elseif ($pregs[1][1] === "7"){
$one = 8;
}
elseif ($pregs[1][1] === "8"){
$one = 4;
}
$rep1 = (array_replace($pregs[1],array(1=>$one)));

如果有一种方法可以减少代码量,我将非常感激。谢谢。

当您用另一个数字替换每个数字时,创建一个查找字符串并使用该数字作为数组的索引,所有位置0-9都已设置,即使它们是相同的值。由于该值是一个字符串,您可以使用该值作为字符串的位置,并直接替换它

$value = $_POST['number'];
$trans = "0516273849";
for ( $i = 1; $i < strlen($value); $i+=2 )  {
    $value[$i] = $trans[$value[$i]];
}
echo $value;

当您将每个数字替换为另一个数字时,创建一个查找字符串并使用该数字作为数组的索引,所有位置0-9都将被设置,即使它们是相同的值。由于该值是一个字符串,您可以使用该值作为字符串的位置,并直接替换它

$value = $_POST['number'];
$trans = "0516273849";
for ( $i = 1; $i < strlen($value); $i+=2 )  {
    $value[$i] = $trans[$value[$i]];
}
echo $value;

一种方法是,传递一行中两个数字的匹配项,并使用适当替换第二个数字:

$_POST['number'] = '343608111218';

echo preg_replace_callback('~(\d)(\d)~', function ($m) {
    return $m[1] . strtr($m[2], '12345678', '51627384');
}, $_POST['number']);
输出:

323304151114
383307121417
这是基于您对如何进行更换的描述。但是,如果您的预期输出反映了进行替换的正确方式,那么替换必须是另一种方式,这只是将参数顺序更改为
strtr

echo preg_replace_callback('~(\d)(\d)~', function ($m) {
    return $m[1] . strtr($m[2], '51627384', '12345678');
}, $_POST['number']);
输出:

323304151114
383307121417

一种方法是,传递一行中两个数字的匹配项,并使用适当替换第二个数字:

$_POST['number'] = '343608111218';

echo preg_replace_callback('~(\d)(\d)~', function ($m) {
    return $m[1] . strtr($m[2], '12345678', '51627384');
}, $_POST['number']);
输出:

323304151114
383307121417
这是基于您对如何进行更换的描述。但是,如果您的预期输出反映了进行替换的正确方式,那么替换必须是另一种方式,这只是将参数顺序更改为
strtr

echo preg_replace_callback('~(\d)(\d)~', function ($m) {
    return $m[1] . strtr($m[2], '51627384', '12345678');
}, $_POST['number']);
输出:

323304151114
383307121417

您是否绝对确定从给定的
343608111218
输入的输出应该是
383307121417
?是的,即使我对此感到困惑:D这也是非常基本的。我想知道为什么这是一个问题!下面有很多很好的答案。是的,这是基本的,但每次我开始思考它的时候,我都会过度思考,最终陷入循环!您是否绝对确定从
343608111218
的给定输入输出应该是
383307121417
?是的,即使我对此感到困惑:D这也是非常基本的。我想知道为什么这是一个问题!下面有很多很好的答案。是的,这是基本的,但每次我开始思考它的时候,我都会过度思考,最终陷入循环!这一个实际上与所需的匹配outcome@RamRaider-哪个期望结果?从问题
38330712147
中可以看出,这一个实际上与期望的结果相匹配outcome@RamRaider-期望的结果是什么?从问题
38330712147