PHP 如何在复制字符串中的每个字符后 "unduplicate" 字符串(恢复字符串)
PHP How to "unduplicate" a string after duplicating each character in the string (reverting the string)
您好,我需要有关 "unduplicating" 字符串的帮助(也就是恢复对字符串所做的更改)。我的 PHP 代码中有一个函数可以复制字符串中的每个字符("Hello" 变为 "HHeelllloo" 等)。现在我想恢复它,我不知道如何(也就是我想把我的 "HHeelllloo" 变成 "Hello")。
代码如下:
<?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>
<?php
if(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>
现在我不知道按下"undupe"按钮时会发生什么。 (顺便说一句,如果我在此 post 中犯了任何错误,我很抱歉。我是 Whosebug 的新手。)。
由于字符串顺序未更改,只需 运行 遍历字符串并跳过第二个字符:
$undupe = '';
for($i = 0; $i < strlen($duped); $i += 2) {
$undupe .= $duped[$i]
}
例如
HHeelllloo
0123456789
^ ^ ^ ^ ^
H e l l o
---------
Hello
您也可以在两个字符之间使用 preg_replace
and reset。替换为空字符串。
$str = preg_replace('/.\K./', "", $str);
这将删除所有其他字符。 See demo at eval.in or regex demo at regex101
注意 这个正则表达式不验证每个奇数字符是否匹配偶数。检查 ^(?:(.))+$
这应该能让您的代码正常工作:
$newstring = "";
for($i=0, $size=strlen($input); $i < $size; $i+=2){
$newstring .= $input[$i];
}
此外,以防万一,make sure to filter/sanitize $_POST。
您好,我需要有关 "unduplicating" 字符串的帮助(也就是恢复对字符串所做的更改)。我的 PHP 代码中有一个函数可以复制字符串中的每个字符("Hello" 变为 "HHeelllloo" 等)。现在我想恢复它,我不知道如何(也就是我想把我的 "HHeelllloo" 变成 "Hello")。
代码如下:
<?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>
<?php
if(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>
现在我不知道按下"undupe"按钮时会发生什么。 (顺便说一句,如果我在此 post 中犯了任何错误,我很抱歉。我是 Whosebug 的新手。)。
由于字符串顺序未更改,只需 运行 遍历字符串并跳过第二个字符:
$undupe = '';
for($i = 0; $i < strlen($duped); $i += 2) {
$undupe .= $duped[$i]
}
例如
HHeelllloo
0123456789
^ ^ ^ ^ ^
H e l l o
---------
Hello
您也可以在两个字符之间使用 preg_replace
and reset。替换为空字符串。
$str = preg_replace('/.\K./', "", $str);
这将删除所有其他字符。 See demo at eval.in or regex demo at regex101
注意 这个正则表达式不验证每个奇数字符是否匹配偶数。检查 ^(?:(.))+$
这应该能让您的代码正常工作:
$newstring = "";
for($i=0, $size=strlen($input); $i < $size; $i+=2){
$newstring .= $input[$i];
}
此外,以防万一,make sure to filter/sanitize $_POST。