มีคนมากมายถามฉันถึงวิธีสร้างอาร์เรย์หลายมิติที่ไม่ซ้ำใคร ฉันได้รับการอ้างอิงจากความคิดเห็นของคุณและมันช่วยฉันได้
ก่อนอื่นขอขอบคุณ @jeromegamez @Daveilers สำหรับวิธีแก้ปัญหาของคุณ แต่ทุกครั้งที่ฉันให้คำตอบพวกเขาถามฉันว่า 'serialize' และ 'unserialize' นี้ทำงานอย่างไร นั่นเป็นเหตุผลที่ฉันต้องการแบ่งปันเหตุผลนี้กับคุณเพื่อที่จะช่วยให้ผู้คนจำนวนมากเข้าใจแนวคิดที่อยู่เบื้องหลัง
ฉันกำลังอธิบายว่าเพราะเหตุใดเราจึงใช้ 'ทำให้เป็นอันดับ' และ 'ไม่ระบุ' ในขั้นตอน:
ขั้นตอนที่ 1: แปลงอาเรย์หลายมิติเป็นอาเรย์หนึ่งมิติ
ในการแปลงอาร์เรย์หลายมิติให้เป็นอาร์เรย์หนึ่งมิติขั้นแรกให้สร้างการแทนค่าสตรีมไบต์ขององค์ประกอบทั้งหมด (รวมถึงอาร์เรย์ที่ซ้อนกัน) ภายในอาร์เรย์ ฟังก์ชั่นเป็นอันดับ () สามารถสร้างการเป็นตัวแทนไบต์ของค่า ในการสร้างการเป็นตัวแทนไบต์ขององค์ประกอบทั้งหมดให้เรียกฟังก์ชั่นอนุกรม () ภายในฟังก์ชั่น array_map () เป็นฟังก์ชั่นการโทรกลับ ผลลัพธ์จะเป็นอาร์เรย์หนึ่งมิติไม่ว่าจะมีอาร์เรย์หลายมิติหลายระดับ
ขั้นตอนที่ 2: ทำให้ค่าไม่ซ้ำกัน
เพื่อทำให้อาเรย์หนึ่งมิติมีความเป็นเอกลักษณ์ให้ใช้ฟังก์ชัน array_unique ()
ขั้นตอนที่ 3: แปลงกลับเป็นอาร์เรย์หลายมิติ
แม้ว่าตอนนี้อาร์เรย์จะมีค่าไม่ซ้ำกัน แต่ค่าดูเหมือนเป็นตัวแทนไบต์ ในการแปลงกลับเป็นอาเรย์หลายมิติให้ใช้ฟังก์ชัน unserialize ()
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
ขอบคุณอีกครั้งสำหรับทั้งหมดนี้