如何在php中合并没有重复的数组

Posted

技术标签:

【中文标题】如何在php中合并没有重复的数组【英文标题】:how to merge arrays without duplicates in php 【发布时间】:2021-06-13 21:44:42 【问题描述】:

执行任务时遇到问题。

我有两个数组,第一个数组显示从 20 到 60 的随机数。 第二个数组显示从 40 到 80 的数字。

我需要创建第三个数组,它将是两个数组的合并,但没有重复。

我的代码如下所示:

$myLength=mt_rand(50,80);
$array1=array();
for ($i=0;$i<$myLength;$i++)
    $array1[$i]=mt_rand(20,60);

print_r($array1);
echo "<br>";
$array2=array();
for ($i=0;$i<$myLength;$i++)
    $array2[$i]=mt_rand(40,80);

print_r($array2);
echo "<br>";
$array3 = array_merge($array1,$array2);
if ($array2!=$array1) 
    print_r($array3);

我可能明白我可以用类似的东西来解决这个问题

if(arr1.value != arr2.value)  print value to arr3 

但我不知道如何实现它。或者也许有更简单的选择,但我坚持并试图找到一种方法。也许这个任务已经有准备好的功能?

有什么想法可以使它最精确吗?

【问题讨论】:

这能回答你的问题吗? php - Merging two arrays into one array (also Remove Duplicates) 最终的数组需要固定长度,还是可变的?请添加具体要求,否则您将收到不符合您要求的答案。 【参考方案1】:

$array3 = array_unique(array_merge($array1, $array2));

array_merge 合并两个数组,同时 array_unique 确保数组中没有重复项。

【讨论】:

请添加一些关于您的代码如何解决问题的说明。 @NigelRen 现在好点了吗?【参考方案2】:

试试看

function arrayRecursiveDiff($aArray1, $aArray2) 
  $aReturn = array();

  foreach ($aArray1 as $mKey => $mValue) 
    if (array_key_exists($mKey, $aArray2)) 
      if (is_array($mValue)) 
        $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
        if (count($aRecursiveDiff))  $aReturn[$mKey] = $aRecursiveDiff; 
       else 
        if ($mValue != $aArray2[$mKey]) 
          $aReturn[$mKey] = $mValue;
        
      
     else 
      $aReturn[$mKey] = $mValue;
    
  
  return $aReturn;
 

【讨论】:

请添加一些说明,说明您的代码将如何解决问题。【参考方案3】:

有很多方法可以解决这个问题。我能想到的最简单的方法来自https://***.com/a/29296247/296555。

它生成 2 个数组 (range) 随机播放 (shuffle) 获取每一个的子集 (array_slice) 合并它们 (array_merge), 最后提取出唯一值 (array_unique)。

见http://sandbox.onlinephpfunctions.com/code/46ae8c76f0aa7fa0c84c449b357911ea1d1919db

<?PHP
// http://sandbox.onlinephpfunctions.com/code/46ae8c76f0aa7fa0c84c449b357911ea1d1919db    

// Final array will have a maximum length of $length*2, but it may be shorter. 
$length = 10;

// First
$first = range(20, 60);
shuffle($first);
$first = array_slice($first, 0, $length);

// Second
$second = range(40, 80);
shuffle($second);
$second = array_slice($second, 0, $length);

$merged = array_unique(array_merge($first, $second));

print_r($merged);

【讨论】:

以上是关于如何在php中合并没有重复的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在Javascript数组中合并/推送重复值[关闭]

如何附加到PHP中的现有数组值[重复]

php合并两个二维数组,如果有两组相同值,只取一个,如何实现?

如何在Javascript数组中合并/推送重复值[关闭]

如何在 Codeigniter/PHP 中合并两行并获取单个数组?

在 ActionScript (3.0) 中干净地合并两个数组?