PHP - İki diziyi tek bir dizide birleştirme (Yinelemeleri de Kaldır)


109

Merhaba İki diziyi birleştirmeye çalışıyorum ve aynı zamanda son Array'den yinelenen değerleri kaldırmak istiyorum.

İşte benim Dizim 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
)

Ve bu benim 2. dizim:

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

)

Her array_mergeiki diziyi de tek bir dizide birleştirmek için kullanıyorum . böyle çıktı veriyor

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

)

Bu yinelenen girişleri kaldırmak istiyorum veya bunları birleştirmeden önce kaldırabilir miyim ... Lütfen yardım edin .. Teşekkürler !!!!!!!


Çünkü $ dizi1 ve $ dizi2'yi değil, $ dizi1 [0] ile $ dizi2 [0] 'ı birleştirmek istiyorsunuz. Array_merge'i her dizinin ilk öğesinde çalıştırmayı deneyin
Bgi

dizi dinamiktir .. bu nedenle her zaman $ dizi1 [0] ve $ dizi2 [0] olmayacaktır
Ravi

bir dizi içindeki her nesnenin kimliğini karşılaştırabileceğim bir şey var mı ???
Ravi

1
İşe yaramayacak ilk yorumumu unutun çünkü birleştirmeye çalıştığınız şey diziler değil nesnelerdir. Bunu elle yapmalısın
Bgi

Yanıtlar:


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

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


5
@ Hemantxp> SORT_REGULAR olmadan şu hatayı veriyor:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi

4
Array_unique'in filtrelenmiş diziyi döndürdüğünü (doğrudan aktarılan dizi parametresine göre hareket etmek yerine) döndürdüğünü belirtmek gerekir, bu nedenle kullanmadan önce sonucu saklamanız gerekir
Mike

7
Array_unique varsayılan olarak dizi değerlerini dizeler olarak kullanmaya çalışır. Dolayısıyla @Ravi hatasıyla karşılaşıldı. Diziniz yalnızca dizelerden oluşuyorsa, üçüncü argümana ihtiyacınız yoktur. Bu bir dizge değilse veya içerik dolaylı olarak bir dizeye dönüştürülemiyorsa, SORT_REGULAR bağımsız değişkenine ihtiyacınız olacaktır.
David Baucum

@ Hemantwagh07 Dizi nesneleri için, kullanıcı SORT_REGULARRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
değilsek

7

İki diziyi birleştirecek ve kopyayı kaldıracak

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

Bu bağlantıyı deneyin link1


7

Daha önce de belirtildiği gibi, array_unique () kullanılabilir, ancak yalnızca basit verilerle uğraşırken. Nesneleri idare etmek o kadar basit değil.

Php dizileri birleştirmeye çalıştığında, dizi üyelerinin değerlerini karşılaştırmaya çalışır. Üye bir nesneyse, değerini alamaz ve bunun yerine spl karmasını kullanır. Spl_object_hash hakkında daha fazlasını buradan okuyun.

Basitçe söylemek gerekirse, iki nesneniz varsa, aynı sınıfın örnekleri ve bunlardan biri diğerine referans değilse - özelliklerinin değeri ne olursa olsun, iki nesneye sahip olursunuz.

Birleştirilmiş dizide yinelenenlerin olmadığından emin olmak için, Imho durumu kendi başınıza halletmelisiniz.

Ayrıca çok boyutlu dizileri birleştirecekseniz, array_merge () yerine array_merge_recursive () kullanmayı düşünün .


4

kullanmayı dene array_unique()

bu, dizilerinizin listesindeki yinelenen verileri ortadan kaldırır.


0

İki diziyi birleştirmek kopyayı kaldırmaz, iki diziden benzersiz elde etmek için aşağıdaki örneği deneyebilirsiniz.

$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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.