php ตรวจสอบว่าอาร์เรย์มีค่าอาร์เรย์ทั้งหมดจากอาร์เรย์อื่นหรือไม่


110
$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);

ฉันต้องการทราบว่า $ all มีค่า $ search_this ทั้งหมดและส่งคืนจริงหรือเท็จ มีความคิดอย่างไร



@VishalKumarSahu ไม่ค่อยซ้ำกัน: ลิงก์ที่คุณระบุเกี่ยวข้องกับการตรวจสอบว่าองค์ประกอบใด ๆ อยู่ในอาร์เรย์อื่นไม่ใช่ว่าองค์ประกอบทั้งหมดมีอยู่ในอื่นหรือไม่
Stefan

คำตอบ:


159

ดูที่array_intersect ()

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this);

11
คุณรู้ว่าคุณสามารถละเว้นทั้งสองcount()สายได้หรือไม่?
Wrikken

1
@Wrikken ไม่สามารถจัดเรียงค่าใหม่ระหว่างarray_intersect()? ฉันหมายถึง['a', 'b'] != ['b', 'a'].
sbichenko

4
และถึงอย่างนั้น: การเปรียบเทียบอาร์เรย์ : " ==TRUE ถ้า $ a และ $ b มีคู่คีย์ / ค่าเดียวกัน" ดังนั้นคำสั่งจึงไม่สำคัญ (ใช้===สำหรับสิ่งนั้น)
Wrikken

2
คำตอบนี้ถือว่าอาร์เรย์ $ all มีเฉพาะค่าที่ไม่ซ้ำกัน หากไม่เป็นเช่นนั้นเราอาจใช้ฟังก์ชัน array_unique บนอาร์เรย์ $ all ในฟังก์ชัน array_intersects
เผยแพร่คำถาม

5
โซลูชัน array_diff @orrd ให้นั้นสะอาดกว่ามาก
Joseph Connolly

224

คำตอบก่อนหน้านี้ล้วนทำงานได้มากกว่าที่ต้องการ เพียงแค่ใช้array_diff นี่เป็นวิธีที่ง่ายที่สุด:

$containsAllValues = !array_diff($search_this, $all);

นั่นคือทั้งหมดที่คุณต้องทำ


4
ขอบคุณสำหรับช่วงเวลา aha; array_intersectผมเข้ามาในความคิด
Derek Illchuk

19
นี่ควรเป็นคำตอบ
Matthew

2
ใช่มันเป็นทางออกที่ดีกว่านี้
Oleksandr Diudiun

1
ทางออกที่ดีกว่าตัดกัน!
TheBosti

1
ฉันเจอหน้านี้และใช้วิธีแก้ปัญหาข้างต้นเพราะคิดว่าซ้ำกัน
Rayzor

9

สั้นลงเล็กน้อยด้วยarray_diff

$musthave = array('a','b');
$test1 = array('a','b','c');
$test2 = array('a','c');

$containsAllNeeded = 0 == count(array_diff($musthave, $test1));

// this is TRUE

$containsAllNeeded = 0 == count(array_diff($musthave, $test2));

// this is FALSE

3

ฉันคิดว่าคุณกำลังมองหาฟังก์ชันจุดตัด

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

array_intersect()ส่งคืนอาร์เรย์ที่มีค่าทั้งหมดของ array1 ที่มีอยู่ในอาร์กิวเมนต์ทั้งหมด โปรดทราบว่าคีย์จะถูกเก็บรักษาไว้

http://www.php.net/manual/en/function.array-intersect.php


0

แล้วสิ่งนี้ล่ะ:

function array_keys_exist($searchForKeys = array(), $searchableArray) {
    $searchableArrayKeys = array_keys($searchableArray);

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.