PHP-来自用户输入的数组

时间:2018-11-07 00:50:43

标签: php arrays string user-input

我已经尝试了大约三天,但我无法弄清楚。 目的是让用户输入数字并过滤掉唯一的数字。假设用户输入了数字: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>

3 个答案:

答案 0 :(得分:1)

这是您的任务的有效代码段。我已经大部分重写了。

<?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

您的代码中的问题是:

  • 空数组作为唯一函数的输入
  • preg_replace缺少结束定界符
  • $_POST[‘numbers’](带引号)
  • 编码一个已经存在的函数(array_unique)...

注意:这个简单的功能尚未检查数字和逗号以外是否还有其他输入。

答案 1 :(得分:1)

您是从单个文本输入中获取用户输入的。

<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']);

答案 2 :(得分:0)

如何利用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>