PHP - удаление дубликатов из массива с помощью array_unique () - PullRequest
0 голосов
/ 26 апреля 2018

Раньше обсуждали эту тему, но я не смог получить ни одного из примеров, чтобы они работали в моем случае.Надеюсь, что это простое исправление, которое может помочь другим людям, имеющим аналогичные проблемы.

У меня есть 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 голосов
/ 26 апреля 2018
<?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'] : [];

Мы можем заключить этот контракт ещес помощью оператора объединения нулей:

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

Если вы хотите убедиться, что из вашей формы передан только массив целых чисел (или, точнее, целых чисел в строках), вы можете отфильтровать массив.

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

Примечание. Вы не можете доверять пользовательскому вводу.

...