【问题标题】:PHP - Merging two arrays into one array (also Remove Duplicates)PHP - 将两个数组合并为一个数组(也删除重复项)
【发布时间】:2012-11-08 07:40:03
【问题描述】:

您好,我正在尝试合并两个数组,并且还想从最终数组中删除重复值。

这是我的数组 1:

Array
    (
    [0] => stdClass Object
    (
    [ID] => 749
    [post_author] => 1
    [post_date] => 2012-11-20 06:26:07
    [post_date_gmt] => 2012-11-20 06:26:07
)

这是我的数组 2:

Array
(
[0] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

)

我使用array_merge 将两个数组合并为一个数组。它给出这样的输出

Array
(
[0] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

[1] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

)

我想删除这些重复的条目,或者我可以在合并之前删除它们吗... 请帮助.. 谢谢!!!!!!!

【问题讨论】:

  • 因为你想合并 $array1[0] 和 $array2[0] 而不是 $array1 和 $array2。尝试在每个数组的第一项上运行 array_merge
  • 数组是动态的..所以它不会总是 $array1[0] 和 $array2[0]
  • 有什么东西可以用来比较数组中每个对象的ID???
  • 忘记我的第一条评论不起作用,因为您要合并的不是数组而是对象。您必须手动完成

标签: php arrays wordpress multidimensional-array


【解决方案1】:
array_unique(array_merge($array1,$array2), SORT_REGULAR);

http://se2.php.net/manual/en/function.array-unique.php

【讨论】:

  • @Hemantxp > 没有 SORT_REGULAR 它给出了这个错误:Catchable fatal error: Object of class stdClass could not be converted to string
  • 值得注意的是array_unique返回的是过滤后的数组(而不是直接作用于传入的数组参数)所以需要先存储结果才能使用
  • 默认情况下,array_unique 尝试将数组值用作字符串。因此,@Ravi 遇到了错误。如果您的数组只是字符串,那么您不需要第三个参数。如果它不是字符串,或者内容不能隐式转换为字符串,则需要 SORT_REGULAR 参数。
  • @Hemantwagh07 对于数组对象,如果我们不使用SORT_REGULAR,它会给出Recoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
【解决方案2】:

如前所述,array_unique() 可以使用,但仅限于处理简单数据时。对象不是那么容易处理的。

当 php 尝试合并数组时,它会尝试比较数组成员的值。如果成员是对象,则它无法获取其值并使用 spl 散列代替。 Read more about spl_object_hash here.

简单地告诉您是否有两个对象,同一个类的实例,如果其中一个不是对另一个的引用 - 您最终将拥有两个对象,无论它们的属性值如何。

为确保您在合并的数组中没有任何重复项,恕我直言,您应该自己处理此案。

另外,如果您要合并多维数组,请考虑使用array_merge_recursive() 而不是array_merge()

【讨论】:

    【解决方案3】:

    它将合并两个数组并删除重复项

    <?php
     $first = 'your first array';
     $second = 'your second array';
     $result = array_merge($first,$second);
     print_r($result);
     $result1= array_unique($result);
     print_r($result1);
     ?>
    

    试试这个链接 link1

    【讨论】:

      【解决方案4】:

      尝试使用array_unique()

      这会消除数组列表中的重复数据..

      【讨论】:

        【解决方案5】:

        您可以使用此代码获得所需的结果。它将删除重复项。

        $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
        $a2=array("e"=>"red","f"=>"green","g"=>"blue");
        
        $result=array_unique(array_merge($a1,$a2));
        
        print_r($result);
        

        【讨论】:

          【解决方案6】:

          上面的最佳解决方案在使用相同的关联键时会遇到一个问题,array_merge() 会将具有相同 NON-NUMBER 键的数组元素合并在一起,因此不适合以下情况

          $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
          $a2=array("c"=>"red","d"=>"black","e"=>"green");
          

          如果您能够将值输出到数组的键中(例如 Eloquent 中的 ->pluck('name', 'id')->toArray()),则可以改用以下合并方法

          array_keys(array_merge($a1, $a2))
          

          基本上,代码的作用是利用 array_merge() 的行为来消除重复的键并返回一个以键作为数组元素的新数组,希望对您有所帮助

          【讨论】:

            【解决方案7】:

            就我而言,我必须使用-&gt;toArray()

            array_unique(array_merge($array1->toArray(),$array2->toArray()), SORT_REGULAR);
            

            结合这两个答案的结果

            【讨论】:

              【解决方案8】:

              合并两个数组不会删除重复项,您可以尝试以下示例从两个数组中获取唯一性

              $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
              $a2=array("e"=>"red","f"=>"green","g"=>"blue");
              
              $result=array_diff($a1,$a2);
              print_r($result);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-01-22
                • 2017-03-22
                • 2017-06-22
                • 1970-01-01
                • 2017-01-01
                • 2020-04-28
                • 2014-06-29
                • 2021-10-20
                相关资源
                最近更新 更多