2014-01-10 243 views
0

我試圖做這樣的事情:in_array() - 陣列陣列搜索不工作

$fetch = array('a', 'b', 'c', 'd', 'e'); 
$input = array('a', 'c', 'e'); 

    if (in_array($input, $fetch)) { 
     echo "Array Values Exists"; 
    } 

    else { 
     echo 'Invalid Values Exists'; 
    } 

基本上,我想看看是否存在$fetch陣列中$input數組中的值。但是,上述結果始終顯示爲Invalid Values Exists,而不是顯示Array Values Exists。當我從示例#3讀取in_array()文檔here時,我想我可以在數組中使用數組作爲參數。我明白這個錯誤嗎?什麼是正確的方法來做到這一點?

+2

肯定[array_intersect() ](http://www.php.net/manual/en/function.array-intersect.php)或[array_diff()](http://www.php.net/manual/en/function.array-diff .php)是這個測試的最佳功能,而不是循環通過價值 –

+0

優秀。我不知道這些。 'array_intersect()'對我來說是完美的,因爲我實際上使用它來匹配和驗證'$ _POST'中的複選框值,'array_intersect()'實際上可以很好地過濾掉數組值,而不是使用foreach語句這將是幾行代碼。謝謝你。 – Neel

回答

1

如何

$fetch = array('a', 'b', 'c', 'd', 'e'); 
$input = array('a', 'b', 'c'); 
$flag = true; 
foreach($input as $key=>$val){ 
    if (!in_array($val, $fetch)) { 
     $flag = false; 
     break; 
    } 
} 

if($flag=== true) 
    echo "Values in input exists in fetch"; 
else 
    echo "Values in input does not exists in fetch"; 
+0

我測試了這個代碼,它工作的很完美!這將非常有用!我的另一種選擇是使用'array_intersect()'如上面提到的Mark Ba​​ker來過濾這些值。但是你的代碼實際上檢查每個值並且返回false,即使其中一個不匹配。這是極好的。非常感謝! :) – Neel

+0

你是最受歡迎的:) –

2

$needle可以是一個數組,但是這意味着你正在尋找陣列,不數組中的元素。

$a = array(array('p', 'h'), array('p', 'r'), 'o'); 

if (in_array(array('p', 'h'), $a)) { 
//Note that array('p', 'h') is in the $haystack array, but not 'p' or 'h' alone. 
    echo "'ph' was found\n"; 
} 

如果你想檢查數組的元素,你需要迭代它以某種方式(與foreacharray_map()吧)。

+0

aha ..現在我明白了。我認爲這是檢查數組中的值並匹配它。重新閱讀文章後,您的帖子意義上說,它實際上匹配數組本身而不是它的值。感謝您解釋這一點。 – Neel

0

不能使用$輸入作爲數組。

參見下例:

<?php 
$a = array(array('p', 'h'), array('p', 'r'), 'o'); 

if (in_array(array('p', 'h'), $a)) { 
echo "'ph' was found\n"; 
} 

if (in_array(array('f', 'i'), $a)) { 
    echo "'fi' was found\n"; 
} 

if (in_array('o', $a)) { 
    echo "'o' was found\n"; 
} 

>

上面的示例將輸出:

'PH' 發現 'O' 被發現