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 значення та повернути true чи false. будь-яка ідея, будь ласка?



@VishalKumarSahu Не зовсім дублікат: дане посилання має відношення до перевірки, чи будь-які елементи містяться в іншому масиві, а не якщо ВСІ елементи містяться в іншому.
Стефан

Відповіді:


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.
Requequestual

5
рішення array_diff @orrd дало набагато чистіше
Джозеф Конноллі

223

Попередні відповіді роблять більше роботи, ніж потрібно. Просто використовуйте array_diff . Це найпростіший спосіб зробити це:

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

Це все, що вам потрібно зробити.


4
Дякую за момент ага; Я задумався array_intersect.
Дерек Ілчук

19
це має бути відповідь
Матвій

2
Так, таке краще рішення
Олександр Дюдіун

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


0

Як щодо цього:

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

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.