2012-03-11 68 views
63
$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。有什麼想法嗎?php檢查數組是否包含來自另一個陣列的所有數組值

+1

[檢查,看看是否一個數組的元素是在PHP另一個陣列]的可能的複製(http://stackoverflow.com/questions/523796/checking-to -see-if-one-arrays-elements-in-another-array-in-php) – 2017-04-19 10:01:11

+0

@VishalKumarSahu不完全重複:你給定的鏈接與檢查是否有任何元素包含在另一個數組中,而不是如果所有元素都包含在另一箇中。 – Stefan 2017-06-20 15:15:30

回答

118

array_intersect()

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

你知道你可以省略'count()'調用嗎? – Wrikken 2013-08-15 16:01:31

+0

@Wrikken在'array_intersect()'期間值不能重新排序?我的意思是,'['a','b']!= ['b','a']'。 – sbichenko 2013-10-16 18:57:07

+1

@exizt:'array_intersect()'不會改變輸入數組,所以'$ search_this'&'$ all'是安全的(它只是返回一個輸出)。函數簽名是'array array_intersect(array $ array1,array $ array2 [,array $ ...])'(safe)。如果它能/可以改變它們,它會是'array array_intersect(array&$ array1,array&$ array2 [,array&$ ...])'(可能改變輸入參數)。此外,'$ search_this'的鍵是_preserve_,並保留第一個數組的順序。因此,兩個鍵/值對,按順序匹配。 – Wrikken 2013-10-16 21:03:29

2

我認爲你正在尋找的交叉功能

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

array_intersect()返回一個包含有 存在於所有的參數數組1的所有值的數組。請注意,鍵被保留。

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

+0

謝謝,它的作品! :) – peter 2012-03-11 14:37:23

6

有點與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 
113

以前的答案都在做更多的工作比他們需要更短。只需使用array_diff即可。這是最簡單的方法:

​​

這就是你所要做的。

+3

謝謝你的時刻;我進來想'array_intersect'。 – 2014-07-04 22:24:16

+6

這應該是答案 – Matthew 2015-10-17 07:28:56

+1

是的,這是更好的解決方案 – noonehos 2015-12-22 09:57:57

0

如何:

function array_keys_exist($searchForKeys = array(), $searchableArray) { $searchableArrayKeys = array_keys($searchableArray); return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); }

相關問題