Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ตรวจสอบค่าใน Array ขนาดใหญ่ด้วย PHP อย่างมีประสิทธิภาพ

เมื่อต้องการตรวจสอบว่าค่าใดค่าหนึ่งมีอยู่ใน Array ที่มีขนาดใหญ่ (พันรายการขึ้นไป) วิธีที่เร็วที่สุดคือการใช้ array_flip ร่วมกับการเข้าถึง Key โดยตรง

วิธีเร็วที่สุด (O(1))

$set = ['value1', 'value2', 'value3', /* ... พันรายการ */];
$valueToCheck = 'value2';

if (isset((array_flip($set))[$valueToCheck])) {
    // พบค่าใน Array
    echo "Found!";
}

เหตุผล: array_flip สลับ Key และ Value ทำให้ค่าที่ต้องการค้นหากลายเป็น Key ของ Array ใหม่ การตรวจสอบ Key ด้วย isset() มีความซับซ้อน O(1) เร็วกว่าการวนลูปหรือ in_array() ที่เป็น O(n) มาก

ฟังก์ชันตรวจสอบหลายค่าพร้อมกัน

function arrayKeysExist(array $keys, array $arr): bool {
    // ตรวจสอบว่า Key ทั้งหมดใน $keys มีอยู่ใน $arr หรือไม่
    return !array_diff_key(array_flip($keys), $arr);
}

// ตัวอย่างการใช้งาน
$haystack = ['a' => 1, 'b' => 2, 'c' => 3];
$needles = ['a', 'c'];
var_dump(arrayKeysExist($needles, $haystack)); // true

$needles = ['a', 'z'];
var_dump(arrayKeysExist($needles, $haystack)); // false

กรณีที่ Array มี Key เป็นตัวเลข (Indexed Array)

$largeArray = range(1, 100000); // Array 100,000 ค่า
$flipped = array_flip($largeArray); // ทำครั้งเดียว แล้วเก็บไว้ใช้ซ้ำ

// ตรวจสอบหลายครั้ง
isset($flipped[50000]);  // true - เร็วมาก
isset($flipped[999999]); // false - เร็วเท่าเดิม

คำแนะนำ: หากต้องตรวจสอบหลายครั้ง ให้ array_flip() เพียงครั้งเดียวแล้วเก็บผลลัพธ์ไว้ใช้ซ้ำ จะได้ประสิทธิภาพสูงสุด