Привет, мне нужна помощь с «дублированием» строки (AKA отменяет изменения, внесенные в строку). В моем коде PHP есть функция, которая дублирует каждый символ в строке («Hello» становится «HHeelllloo» и т. Д.). Теперь я хочу отменить это, и я не знаю, как (AKA, я хочу превратить мой «HHeelllloo» в «Привет»).
Вот код:
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
?>
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Untitled 1</title>
</head>
<body>
<?phpif(isset($_POST["dupe"]) && !empty($_POST["input"])){
$input = $_POST["input"];
$newstring = "";
for($i = 0; $i < strlen($input); $i++){
$newstring .= str_repeat(substr($input, $i,1), 2);
}
echo $newstring;
}
if(isset($_POST["undupe"]) && !empty($_POST["input"])){
}
?>
<form method="post">
<input type="text" name="input" placeholder="Input"></input><br><br>
<button type="submit" name="dupe">Dupe</button>
<button type="submit" name="undupe">Undupe</button>
</form>
</body>
</html>
Теперь я не знаю, что делать, когда нажимаю кнопку «отменить». (Кстати, извините, если я допустил какие-либо ошибки в этом посте. Я новичок в stackoverflow.).
Поскольку порядок строк не изменяется, просто запустите строку и пропустите второй символ:
$undupe = '';
for($i = 0; $i < strlen($duped); $i += 2) {
$undupe .= $duped[$i]
}
например
HHeelllloo
0123456789
^ ^ ^ ^ ^
H e l l o
---------
Hello
Вы также можете использовать preg_replace
а также сброс между двумя персонажами. Заменить на пустую строку.
$str = preg_replace('/.\K./', "", $str);
Это лишит любого другого персонажа. Посмотреть демо на eval.in или же regex demo at regex101
Заметка что это регулярное выражение не проверяет, совпадает ли каждый нечетный символ с четным. Проверить с ^(?:(.)\1)+$
Это должно заставить ваш код работать:
$newstring = "";
for($i=0, $size=strlen($input); $i < $size; $i+=2){
$newstring .= $input[$i];
}
Кроме того, на всякий случай, не забудьте отфильтровать / очистить $ _POST.