【问题标题】:PHP: How to replace duplicate array values in an array with a fixed sizePHP:如何用固定大小替换数组中的重复数组值
【发布时间】:2020-11-13 06:28:52
【问题描述】:

我有一个固定大小为 10 的数组。该数组填充了随机数。我想要的是打印大小为 10 的数组,并过滤​​掉所有重复项。

我使用了array_unique,但它只是删除了重复值,并没有用新的随机数替换重复值。因此,有时大小为 9 个数字,有时大小为 7 个数字。我希望数组的长度始终为 10 个数字,并且没有重复值。我已经尝试了几个函数(in_array、isset、array_replace、array_merge、array_search),但我不知道如何完成我想要的。我处于我的代码可以检测到重复项的部分,但我不知道如何用同样唯一的新随机数替换这些重复项。这是我写的代码:

$numbers = Array (rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100));
            If (count($numbers) > count(array_unique($numbers)))
                {
                    Foreach ($numbers As $number)
                    {
                       $inArray = array_search($number, $numbers);
                       If ($inArray === FALSE)
                            {
                               echo "No duplicate(s) found" ;
                            }
                       Else
                            {
                               echo "Duplicate(s) found" ;
                            }
                    }

                   
                }
            Else
                {      
                }

【问题讨论】:

    标签: php arrays duplicates


    【解决方案1】:

    一个简单(但不是最佳)的解决方案是在数组长度不是 10 时继续向数组添加值,并始终删除重复项,这将确保数组具有 10 个不同的随机元素。

    $array = [];
    
    while (count($array) < 10){
        $array[] = rand(10, 100);
        $array = array_unique($array);
    }
    
    print_r($array);
    

    【讨论】:

    • 这正是我想要的。谢谢!
    【解决方案2】:

    可能是这样的?

    <?php
    $numbers = [rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100), rand(10,100)];
    
        foreach ($numbers as $key => $number)
        {
            if (in_array($number,$numbers))
            {
                $numbers[$key] = rand(10,100);
            }
    
        }
    
    
    print_r($numbers);
    ?>
    

    【讨论】:

    • 感谢您的建议,但我将代码调整为您的,但仍然显示重复项
    【解决方案3】:

    对于像这样的小数组(100 个数字),您可以生成一个包含 10-100 个元素的数组,然后随机选取。

    一条线解决方案:

    print_r(array_rand(range(10, 100), 10));
    

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 1970-01-01
      • 2012-08-12
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2015-07-28
      相关资源
      最近更新 更多