2012-03-11 11 views
63
$all = array 
(
    0 => 307, 
    1 => 157, 
    2 => 234, 
    3 => 200, 
    4 => 322, 
    5 => 324 
); 
$search_this = array 
(
    0 => 200, 
    1 => 234 
); 

मैं यह जानना चाहता हूं कि $ सभी में सभी $ search_this मान हैं और सत्य या गलत लौटाते हैं। कोई विचार कृपया?PHP जांचें कि सरणी में किसी अन्य सरणी से सभी सरणी मान

+1

[अगर एक सरणी के तत्वों PHP में एक और सरणी में देखने के लिए जांच की जा रही] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/523796/checking-to -see-if-one-arrays-elements-in-in-another-array-in-php) –

+0

@ विशलकुमारसाहू काफी डुप्लिकेट नहीं: आपके दिए गए लिंक को जांचने के साथ करना है कि किसी भी तत्व को किसी अन्य सरणी में निहित किया गया है, नहीं सभी तत्व एक दूसरे में निहित हैं। – Stefan

उत्तर

118

array_intersect() देखें।

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

आप जानते हैं कि आप 'गिनती()' कॉल दोनों को छोड़ सकते हैं? – Wrikken

+0

@Wrikken 'array_intersect() 'के दौरान मूल्यों को फिर से व्यवस्थित नहीं किया जा सकता है? मेरा मतलब है, '[' ए ',' बी ']! = [' बी ',' ए '] '। – sbichenko

+1

@exizt: 'array_intersect()' इनपुट सरणी को परिवर्तित नहीं करता है, इसलिए '$ search_this' और' $ all' सुरक्षित हैं (यह केवल आउटपुट देता है)। फ़ंक्शन हस्ताक्षर 'सरणी array_intersect (सरणी $ array1, सरणी $ array2 [, सरणी $ ...]) '(सुरक्षित) है। अगर यह उन्हें बदल देगा/बदल सकता है, तो यह 'array array_intersect (सरणी और $ array1, सरणी और $ array2 [, सरणी और $ ...]) '(इनपुट तर्कों में संभावित परिवर्तन) होगा। साथ ही, '$ search_this' की कुंजी _preserve_ हैं, और पहली सरणी का क्रम रखा गया है। तो, दोनों कुंजी/मूल्य जोड़े, उनके आदेश के रूप में, मैच। – Wrikken

2

मैं तुम्हें एक दूसरे को काटना समारोह

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

array_intersect() कि सभी तर्कों में मौजूद हैं array1 के सभी मानों युक्त एक सरणी रिटर्न की तलाश कर रहे है। ध्यान दें कि कुंजी संरक्षित हैं।

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

+0

धन्यवाद, यह काम करता है! :) – peter

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 का उपयोग करें। यह करने का सबसे आसान तरीका है:

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

आपको बस इतना करना है।

+3

आह पल के लिए धन्यवाद; मैं 'array_intersect' सोचने आया था। –

+6

यह उत्तर – Matthew

+1

होना चाहिए हां यह बेहतर समाधान – noonehos

0

कैसे इस बारे में:

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

संबंधित मुद्दे