PHP - 使用array_unique()

时间:2018-04-25 21:26:28

标签: php html array-unique

之前有关于这个主题的讨论,但是我无法从他们的案例中得到任何一个例子。希望这是一个简单的解决方案,可以帮助其他人遇到类似的问题。

我有一个html表单,它将一系列5个数字作为数组。我只是想打印数字而没有任何重复。我正在尝试使用array_unique()完成此操作。

表格:

<p>Enter a series of numbers.  Any duplicates will be removed, then 
displayed on the screen.</p>
<form action="rDuplicate.php" method="post">
Number 1: <input type="number" name="number[]"><br>
Number 2: <input type="number" name="number[]"><br>
Number 3: <input type="number" name="number[]"><br>
Number 4: <input type="number" name="number[]"><br>
Number 5: <input type="number" name="number[]"><br>
<input type="submit">
</form>

PHP:

<?php 
    $values = array($_POST);
    $result = array_unique($values);
    print_r($result);
?>

当前样本输出:

Array ( [number] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 2 [4] => 1 ) )

1 个答案:

答案 0 :(得分:1)

<?php
$numbers = $_POST['number']  ?? [];
$numbers = is_array($numbers)
                ? array_filter($numbers, 'ctype_digit')
                : [];
$numbers = array_unique($numbers);

var_dump($numbers);

长篇:

if(isset($_POST['number']))
{
    $numbers = $_POST['number'];
} else {
    $numbers = [];
}
if(is_array($numbers)) {
    $numbers = array_filter($numbers, 'ctype_digit');
} else {
    $numbers = [];
}
$numbers = array_unique($numbers);   

在长版本中,我们可以使用三元运算符来收缩if else:

$numbers = isset($_POST['number']) ? $_POST['number'] : [];

我们可以使用null合并运算符进一步收缩:

$numbers = $_POST['number'] ?? [];

如果你想确保你只有一个从表单传递的整数数组(或更准确地说是字符串中的整数),你可以过滤你的数组。

$numbers = array_filter($numbers, 'ctype_digit');

注意:您不能信任用户输入。