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

标签 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)~', $_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

Demo on 3v4l.org

关于php - 如何在 php 中使用 if else 语句将每隔一个数字替换为另一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54549110/

相关文章:

php - 我需要帮助在同一个 sql 中显示两次使用 datetime 函数

PHP PDO 超时

php - 循环中的 SQL 注入(inject)不起作用

java - 如何从 Youtube Api 获取 channel ID?它显示此错误 "JSONException: No value for channelId"

c++ - 需要有关 C++ 指针和字符数组(C 字符串)的建议

javascript - 如何检查所有参数是否相同并返回字符串

php - mysql 文本搜索 OR 语法

c - 将函数调用中的多维数组分配给变量

python - 获取 if 语句以读取 raw_input 选择

swift - 如果无法访问所有这些,则继续