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

时间:2019-02-06 08:12:20

标签: 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)));

如果有办法可以减少代码量,我将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:4)

一种方法是使用preg_replace_callback,连续传递两位数字的匹配,然后使用strtr适当地替换第二位数字:

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

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

输出:

323304151114

这是基于您对如何进行替换的描述。但是,如果您的预期输出反映了执行替换的正确方法,则替换必须是相反的方式,这只是将参数的顺序更改为strtr的问题:

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

输出:

383307121417

Demo on 3v4l.org

答案 1 :(得分:2)

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

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

编辑:

要获得“期望的”输出是什么(尽管只是猜测),您可以将行更改为...

$trans = "0246813579";

答案 2 :(得分:0)

$transform = array(
    0 => 0,
    1 => 5,
    2 => 1,
    3 => 6,
    4 => 8,
    5 => 7,
    6 => 3,
    7 => 8,
    8 => 4,
    9 => 9
);
$number = '343608111218';
$num = array_map('intval', str_split($number));
$i = 1;
foreach ($num as $key => $value) {

    if (0 == ($i % 2)) {
        echo $transform[$value];
    } else {
        echo $value;
    }
    $i++;
}