-2

我有许多从投票表发送的变量。我想检查并确保表单上没有两个值相等。我怎样才能做到这一点?

<?php
$Name = $_POST['name'];
$ID = $_POST['id'];
$Topic_1 = $_POST['1'];
$Topic_2 = $_POST['2'];
$Topic_3 = $_POST['3'];
$Topic_4 = $_POST['4'];
$Topic_5 = $_POST['5'];
$Topic_6 = $_POST['6'];
$Topic_7 = $_POST['7'];
$Topic_8 = $_POST['8'];
$Topic_9 = $_POST['9'];
$Topic_10 = $_POST['10'];
$Topic_11 = $_POST['11'];
$Topic_12 = $_POST['12'];
$Topic_13 = $_POST['13'];
$Topic_14 = $_POST['14'];
$Topic_15 = $_POST['15'];

if($_POST != $_POST)???
4

3 回答 3

4

您可以使用构造轻松确定任何数组是否包含重复值

if (count($array) === count(array_unique($array))) {
    // contains duplicates
}

这适用于任何数组,包括$_POST. 因此,如果您想确保所有 15 个字段以及名称和 id 相对于彼此都是唯一的,请替换$_POST上面的$array内容,您就可以开始了。

您可能还需要记住以下几点:

  1. 如果某些表单元素可能会留空并且您可以允许多个空白字段,那么您需要在进行重复检查之前将它们从数组中删除。这可以通过(只有一种可能的方式)来完成:

    $array = array_filter($array, function($i) { return strlen($i); });
    
  2. 如果您只想在表单元素的一个子集中查找重复项,那么最重要的方法是使该子集成为它自己的数组。通过适当地命名表单输入元素,您可以让 PHP 自动为您执行此操作。

  3. 与唯一性概念相关的是 function array_count_values,它在类似情况下很有用(它可以告诉你有多少重复元素以及它们的确切值是多少)。

于 2013-09-02T20:53:03.677 回答
0

$_POST != $_POST

肯定不行,如果同一个变量不是同一个变量,就会导致这个测试。

您必须通过 $_POST 数组循环

<?php
foreach($_POST as $key => $value) {
    foreach($_POST as $subKey => $subValue) {
        if($key != $subKey && $_POST[$key] == $_POST[$key])
            return false;
    }
}
于 2013-09-02T20:49:47.633 回答
0

您正在寻找的是以下内容

$_POST['1'] = 'a';
$_POST['2'] = 'b';
$_POST['3'] = 'c';
$_POST['4'] = 'a';
$_POST['5'] = 'd';

$results = array_unique($_POST);
var_dump($results);

返回:

array
  1 => string 'a' (length=1)
  2 => string 'b' (length=1)
  3 => string 'c' (length=1)
  5 => string 'd' (length=1)
于 2013-09-02T21:40:12.500 回答