douwen7516 2018-04-25 21:26
浏览 37
已采纳

PHP - 使用array_unique()从数组中删除重复项

There's been discussions about this topic before, but I haven't been able to get any of the examples from them to work in my case. Hoping this is an easy fix that may help others having similar problems.

I have an html form that takes a series of 5 numbers as an array. I simply want to print the numbers without any duplicates. I'm trying to accomplish this using array_unique().

The Form:

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

The PHP:

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

Current Sample Output:

Array ( [number] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 2 [4] => 1 ) )
  • 写回答

1条回答 默认 最新

  • dongpa9277 2018-04-25 21:31
    关注
    <?php
    $numbers = $_POST['number']  ?? [];
    $numbers = is_array($numbers)
                    ? array_filter($numbers, 'ctype_digit')
                    : [];
    $numbers = array_unique($numbers);
    
    var_dump($numbers);
    

    Long form:

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

    In the long hand version, we can use the ternary operator to contract the if else:

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

    We can contract that further with the null coalescing operator:

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

    If you want to ensure you only have an array of integers (or more precisely integers in strings) passed from your form, you can filter your array.

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

    Note: You cannot trust user input.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改