我已经试了大约三天了,但我就是想不通。目标是让用户输入数字并过滤掉唯一的数字。假设用户输入数字:24、24、56、23、1、3、24——输出应该是24、56,23、1,3。到目前为止,一切似乎都在运转。唯一的问题是,当我点击提交按钮时,它不会返回任何值。
<!DOCTYPE html>
<!-- e9_1.php
Project1.php
-->
<html lang = "en">
<head>
<title> Project1.php </title>
<meta charset = "utf-8" />
<?php
function unique($strings) {
$uniqueStrings = array();
foreach ($strings as $string) {
foreach ($uniqueStrings as $uString) {
if ($string == $uString) break;
if(isset($_POST[‘numbers’])){
$str=preg_split("/[s,]", $_POST['numbers']);
}
}
if ($string != $uString)
$uniqueStrings[] = $string;
}
return $uniqueStrings;
}
?>
</head>
<body>
<?php
$str = array();
$uStr=unique($str);
foreach ($uStr as $st)
print ("$st <br />");
?>
<br>
Enter Numbers: <br>
<form method = "POST">
<input type="text" name="numbers"/>
<input type="submit" name="Submit" />
</body>
</html>
以下是您任务的工作片段。我已经重写了大部分内容。
<?php
//$_POST['numbers'] = " 24, 24, 56, 23, 1, 3, 24";
function getNumbers($string) {
$string = preg_replace("/[s]/","",$string); // remove all possible space, tabs, etc
$n = explode(",", $string); // a simple explode will be enough then
return $n;
}
$numbers=array_unique(getNumbers($_POST['numbers'])); // finally use array_unique() to get rid of the doubles.
var_dump($numbers);
// OUTPUT:
array(5) {
[0]=>
string(2) "24"
[2]=>
string(2) "56"
[3]=>
string(2) "23"
[4]=>
string(1) "1"
[5]=>
string(1) "3"
}
代码段可在此处找到:https://3v4l.org/BK0eU
代码中的问题是:
- 空数组作为函数unique的输入
- preg_replace缺少结束分隔符
- 带大引号的
$_POST[‘numbers’]
- 编码一个已经存在的函数(array_unique(
注意:这个简单的函数还不检查除了数字和逗号之外是否还有其他输入。
您从单个文本输入中获得用户输入。
<input type="text" name="numbers"/>
这意味着$_POST['numbers']
将是一个字符串,而不是一个数组,所以unique
函数需要取一个字符串。
如果你正在寻找唯一的数字,那么最好对数字序列进行正匹配,而不是在空白或其他任何地方进行拆分。
当PHP已经有array_unique
函数时,您的函数相当复杂。这应该只是匹配字符串中的数字并通过array_unique
运行结果数组的问题。此外,我建议不要在这样的辅助函数中引用像$_POST
这样的超全局。如果您希望它是可重用的,它应该将其输入作为参数,而不是依赖于全局值。
基于所有这些,我会写这样的函数:
function unique_numbers(string $input): array
{
preg_match_all('/d+/', $input, $matches);
return array_unique($matches[0]);
}
并用张贴的字符串调用它
$numbers = unique_numbers($_POST['numbers']);
如何利用PHP函数使其更简单?
<!DOCTYPE html>
<html lang = "en">
<head>
<title> Project1.php </title>
<meta charset = "utf-8" />
</head>
<body>
<?php
if (isset($_POST['numbers'])) {
$strings = $_POST['numbers'];
$str = explode(",", $strings);
$uStr=array_unique($str);
echo implode(",", $uStr);
}
?>
<br>
Enter Numbers: <br>
<form method = "POST">
<input type="text" name="numbers"/>
<input type="submit" name="Submit" />
</body>
</html>