代码之家  ›  专栏  ›  技术社区  ›  Jim

如何比较数组并提取差异?

php
  •  0
  • Jim  · 技术社区  · 17 年前

    没有重复的

    $array1[]['name'] = 'Kim, Jones';
    $array1[]['name'] = 'Jim, Miller';
    

    array1是我构建的一个数组,我希望将它添加到来自数据库的数组中。第二个数组中的键也被命名为“name”。谢谢

    我设法合并了这两个数组,但仍然可以看到重复的数组。

    Array
    (
        [0] => Array
            (
                [WNumber] => ADMIN
                [Name] => Tim, Cooley
                [Employer] => CalPERS
                [Student] => 1
                [Perm] => 1
                [QA] => 0
                [Supervisor] => 1
                [RQW] => 0
            )
    

    我的第二个阵列是这样构建的:

    $add_names[]['Name']='Jim, Jones';
    

    我只想在没有重复项的第一个数组中添加$add_名称。

    5 回复  |  直到 15 年前
        1
  •  1
  •   Aistina    17 年前

    我认为你需要结合使用 array_merge (将两个数组相加)和 array_unique

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

    注意 数组_唯一 在使用多维数组时将无法正常工作,因此,如果数组数据看起来与您在问题中所用的方式相同,则必须考虑一种解决方法。 One of the comments on the array_unique page 暗示 serialize unserialize 在所有数组元素上。注意,如果你有一个大数组,这可能意味着一个性能命中,所以你可能想考虑在这个场景中避免多维数组。

    大概是这样的:

    $merged_array = array_merge($array1, $array2);
    $serialized_array = array_map("serialize", $merged_array);
    $filtered_array = array_unique($serialized_array);
    $final_array = array_map("unserialize", $filtered_array);
    
        2
  •  1
  •   Dooltaz    17 年前

    我很想向您介绍CakePHP,因为它有许多函数,可以在其“Set”类中轻松实现这一点。您的问题是,结果存在于嵌套数组中。简单的“array_unique”在嵌套数组中不起作用。

    我会用老式的方式做。。。

    $array1[]['name'] = 'Kim, Jones';
    $array1[]['name'] = 'Jim, Miller';
    
    $array2[]['name'] = 'Kim, Jones';
    $array2[]['name'] = 'Jimbo, Miller';
    $array2[]['name'] = 'Jim, Jones';
    
    $new_array=array_merge($array1, $array2);
    $out_array = array();
    $key_array = array();
    foreach($new_array as $i => $row) {
            if (empty($key_array[$row['name']])) {
                    $out_array[] = $row;
            }
            $key_array[$row['name']] = 1;
    }
    
    print_r($out_array);
    

    这个代码适合我。。。

        4
  •  0
  •   Preet Sangha    17 年前

    做 array_diff

    Description
    
    array array_diff ( array $array1 , array $array2 [, array $ ... ] )
    Compares array1 against array2 and returns the difference.
    
        5
  •  0
  •   Cynics    17 年前

    没有一个直接的函数来处理您在php中寻找的内容,可能您需要为它编写一个函数。

    $a = array( array( 'name' => 'Omid' ), 12 );
    $b = array( array( 'name' => 'testing' ) );
    

    你想把它们合并在一起

    $merge = array( array( 'name' => 'testing' ), 12 );
    

    如果这是你想要的,那么你可能想看看这个评论 array merge recursive 这导致了以下代码:

    function array_merge_recursive_distinct ( array &$array1, array &$array2 )
    {
      $merged = $array1;
    
      foreach ( $array2 as $key => &$value )
      {
        if ( is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] )     )
        {
          $merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value );
        }
        else
        {
          $merged [$key] = $value;
        }
      }
    
      return $merged;
    }
    
    推荐文章