【问题标题】:how to merge arrays without duplicates in php如何在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 arrays


【解决方案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://stackoverflow.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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2019-07-18
    • 2019-01-05
    • 2022-01-05
    相关资源
    最近更新 更多