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

масив динамічний .. тому він не завжди буде $ array1 [0] і $ array2 [0]
Раві

чи є щось, з чим я можу порівняти ідентифікатор кожного об’єкта в масиві ???
Раві

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 читайте тут.

Просто кажучи, якщо у вас є два об'єкти, екземпляри того самого класу, і якщо один з них не посилається на інший - у вас з'явиться два об'єкти, незалежно від значення їх властивостей.

Щоб переконатися, що у вас немає жодних дублікатів у об’єднаному масиві, Imho, вам слід вирішувати справу самостійно.

Також якщо ви збираєтеся об'єднати багатовимірні масиви, подумайте про використання 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.