PHP - การรวมอาร์เรย์สองอาร์เรย์ไว้ในอาร์เรย์เดียว (ลบรายการที่ซ้ำกันด้วย)


109

สวัสดีฉันกำลังพยายามรวมสองอาร์เรย์และต้องการลบค่าที่ซ้ำกันออกจากอาร์เรย์สุดท้าย

นี่คือ Array 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]
ราวี

มีอะไรที่ฉันสามารถเปรียบเทียบ ID ของแต่ละวัตถุภายในอาร์เรย์ได้บ้าง ???
ราวี

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 ส่งคืนอาร์เรย์ที่กรองแล้ว (แทนที่จะทำหน้าที่โดยตรงกับพารามิเตอร์อาร์เรย์ที่ส่งผ่านเข้ามา) ดังนั้นคุณต้องเก็บผลลัพธ์ก่อนจึงจะใช้งานได้
Mike

7
โดยค่าเริ่มต้น array_unique พยายามใช้ค่าอาร์เรย์เป็นสตริง ดังนั้นข้อผิดพลาด @Ravi จึงเข้ามา หากอาร์เรย์ของคุณเป็นเพียงสตริงคุณก็ไม่จำเป็นต้องมีอาร์กิวเมนต์ที่สาม ถ้าไม่ใช่สตริงหรือเนื้อหาไม่สามารถส่งเป็นสตริงโดยปริยายได้คุณจะต้องมีอาร์กิวเมนต์ SORT_REGULAR
David Baucum

@ 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 ()



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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.