【问题标题】:PHP merging arrays uniquelyPHP唯一地合并数组
【发布时间】:2013-09-30 07:27:41
【问题描述】:

所以我正在开发一个结合了四个数组的小型 php 应用程序。 现在有一些可能的数组可能为空。 我尝试了以下解决方案来唯一地合并四个数组。

<?php
$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];

$new_array;

if(is_array($a) && is_array($b) && is_array($c) && is_array($d))
{
    $new_array =  array_unique(array_merge($a,$b,$c,$d));
}else if(is_array($a) && is_array($b) && is_array($c))
{
        $new_array =  array_unique(array_merge($a,$b,$c));
}else if(is_array($a) && is_array($b))
{   
    $new_array =  array_unique(array_merge($a,$b));
}else{
    $new_array = $a;
}

print_r($new_array);
?>

我很快意识到我的代码非常不正常,因为它不能满足所有可能的数组组合,同时排除了空变量。

我该如何解决这个问题。确保所有作为数组的变量都被合并,而那些不是数组的变量被丢弃。 谢谢

【问题讨论】:

标签: php arrays merge


【解决方案1】:

这个怎么样?将所有数组放在一个数组中,这样您就可以轻松地遍历它们,并使用custom in_array() 函数检查它们是否已经存在?

这种方式的好处是它不会将脚本限制为只有四个数组,因为它会循环遍历你聚集在一起的所有数组。

$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];

$array_stack = array($a, $b, $c, $d);

$new_array = array();

foreach($array_stack as $stack){
    if(!is_array($stack)) continue;
    foreach($stack as $value){
        if(!in_array($value, $new_array)) $new_array[] = $value;
    }
}

print_r($new_array);

【讨论】:

    【解决方案2】:

    也许是这样的:

    <?php
    
    $a = [1,2,3,4,5];
    $b = null;
    $c = [5,4,3,2,1];
    $d = [1,2];
    
    $new_array;
    
    if(is_array($a)) $new_array = $a;
    if(is_array($b)) $new_array =  array_unique(array_merge($new_array,$b));
    if(is_array($c)) $new_array =  array_unique(array_merge($new_array,$c));
    if(is_array($d)) $new_array =  array_unique(array_merge($new_array,$d));
    ?>
    

    【讨论】:

      【解决方案3】:

      老问题,但无论如何都会给出我的意见。更通用的方法:

      function multiple_array_merge() {
          $args = func_get_args();
      
          $array = [];
          foreach ($args as $i) {
              if (is_array($i)) $array = array_merge($array, $i);
          }
      
          return array_unique($array);
      }
      
      $a = [1, 2, 3, 4, 5];
      $b = null;
      $c = [5, 4, 3, 2, 1];
      $d = [1, 2];
      
      $merged = multiple_array_merge($a, $b, $c, $d);
      

      【讨论】: