我有一个数字,用户会将其输入表格 - 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)));
如果有什么方法可以减少代码量,我将不胜感激。谢谢。
最佳答案
一种方法是使用 preg_replace_callback
,连续传递 2 位数字的匹配项并使用 strtr
适本地替换第二位数字:
$_POST['number'] = '343608111218';
echo preg_replace_callback('~(\d)(\d)~', function ($m) {
return $m[1] . strtr($m[2], '12345678', '51627384');
}, $_POST['number']);
输出:
323304151114
这是基于您提供的关于如何进行替换的描述。但是,如果您的预期输出反射(reflect)了进行替换的正确方法,则替换必须是相反的,这只是将参数顺序更改为 strtr
的问题:
echo preg_replace_callback('~(\d)(\d)~', function ($m) {
return $m[1] . strtr($m[2], '51627384', '12345678');
}, $_POST['number']);
输出:
383307121417
关于php - 如何在 php 中使用 if else 语句将每隔一个数字替换为另一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54549110/