PHP - объединение двух массивов в один (также удаление дубликатов)


109

Привет, я пытаюсь объединить два массива, а также хочу удалить повторяющиеся значения из окончательного массива.

Вот мой массив 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 для первого элемента каждого массива
Bgi

array является динамическим .. поэтому он не всегда будет $ array1 [0] и $ array2 [0]
Рави

есть ли что-нибудь, с чем я могу сравнить ID каждого объекта внутри массива ???
Ravi

1
Забудьте мой первый комментарий, который не сработает, потому что вы пытаетесь объединить не массивы, а объекты. Вы должны делать это вручную
Bgi

Ответы:


235
array_unique(array_merge($array1,$array2), SORT_REGULAR);

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


5
@ Hemantxp> без SORT_REGULAR выдает эту ошибку:Catchable fatal error: Object of class stdClass could not be converted to string
Рави

4
Стоит отметить, что array_unique возвращает отфильтрованный массив (вместо того, чтобы воздействовать непосредственно на переданный параметр массива), поэтому вам нужно сохранить результат, прежде чем вы сможете его использовать
Майк,

7
По умолчанию 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>
mapmalith

7

Он объединит два массива и удалит дубликаты

<?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


7

Как уже упоминалось, array_unique () можно использовать, но только при работе с простыми данными. С объектами не так-то просто обращаться.

Когда php пытается объединить массивы, он пытается сравнить значения членов массива. Если член является объектом, он не может получить свое значение и вместо этого использует хэш spl. Подробнее о spl_object_hash здесь.

Проще говоря, если у вас есть два объекта, экземпляры одного и того же класса, и если один из них не является ссылкой на другой - у вас будет два объекта, независимо от значения их свойств.

Чтобы быть уверенным, что у вас нет дубликатов в объединенном массиве, имхо, вам следует разобраться с этим случаем самостоятельно.

Кроме того, если вы собираетесь объединять многомерные массивы, рассмотреть возможность использования array_merge_recursive () над array_merge () .


4

попробуйте использовать array_unique()

это устраняет дублированные данные внутри списка ваших массивов.


0

Объединение двух массивов не приведет к удалению дубликата, вы можете попробовать приведенный ниже пример, чтобы получить уникальный из двух массивов.

$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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.