Как я могу заменить каждую вторую цифру на другую, используя оператор if else в php? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть номер, который пользователь введет в форму - 12 цифр.Каждую вторую цифру необходимо заменить - если цифра: 1, затем сделать 5 2, затем 1 1 3, затем 6 4, затем 2 2, затем 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 голосов
/ 06 февраля 2019

Один из способов сделать это с помощью preg_replace_callback, передавая совпадение из 2 цифр подряд и используя strtr для замены 2-й цифры соответствующим образом:

$_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

Демонстрация на 3v4l.org

0 голосов
/ 06 февраля 2019
$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++;
}
0 голосов
/ 06 февраля 2019

Поскольку вы заменяете каждую цифру другой, создайте строку поиска и используйте число в качестве индекса для массива, все позиции 0-9 установлены - даже если они имеют одинаковое значение.Поскольку значение является строкой, вы можете просто использовать значение в качестве позиции строки и заменить ее непосредственно ...

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

Редактировать:

Комудобившись того, что является «желаемым» результатом (хотя это только предположение относительно того, что это должно быть), вы можете изменить строку на ...

$trans = "0246813579";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...