使用 PHP 检查数组是否包含另一个数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12936934/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Check if an array contains another array with PHP
提问by mozcelikors
Possible Duplicate:
Checking if an array contains all elements of another array
可能的重复:
检查一个数组是否包含另一个数组的所有元素
I have posted something like this to the Stackoverflow before, but the answers do not fully satisfy me. That's why I'm posting the question again, but changing the question all along.
我之前已经在 Stackoverflow 上发布过类似的内容,但答案并不完全让我满意。这就是为什么我再次发布问题,但一直在改变问题。
Some people helped me to construct a function that checks if an array($GroupOfEight[$i])that is an element of a multidimensional array($GroupOfEight)equals another array($stackArray), disregarding the number ordering in the arrays.
有些人帮助我构建了一个函数,用于检查array($GroupOfEight[$i])作为多维元素的元素是否array($GroupOfEight)等于另一个数组($stackArray),而不考虑数组中的数字排序。
However, what I need to check is whether the mentioned array($stackArray)contains any another array($GroupOfEight[$i])in the multidimensional array($GroupOfEight)or not, that means main array($stackArray)can consist more elements than subarrays($GroupOfEight[$i]).
但是,我需要检查的是所提到的是否array($stackArray)包含array($GroupOfEight[$i])多维中的任何另一个array($GroupOfEight),这意味着 mainarray($stackArray)可以包含比subarrays($GroupOfEight[$i]).
Here is the one working code that I've gathered so far, but need to be modified to the version I want:
这是我到目前为止收集的一个工作代码,但需要修改为我想要的版本:
<?php
$GroupOfEight = array (
array(0,1,3,2,4,5,7,6),
array(4,5,6,7,15,12,13,14),
array(12,13,15,14,8,9,11,10),
array(2,6,14,10,3,7,15,11),
array(1,3,5,7,13,15,9,11),
array(0,4,12,8,1,5,13,9),
array(0,1,3,2,8,9,11,10)
);
$stackArray = array(0,4,12,1,9,8,5,13,9,2,5,2,10);
/*$stackArray gets value with POST Method by URL parameter.
This is just the example. As you see this array contains
$GroupOfEight[4], and also it contains many other numbers.*/
/* The function given below checks if $stackArray equals any
of the subarrays of $GroupOfEight. However, we want to check
if $stackArray caontains any of the subarrays of function.
If it does, function should return the index number, if it
doesnt it should return -1.*/
function searcheight($stackArray,$GroupOfEight){
for($i=0; $i<count($GroupOfEight);$i++){
$containsSearch = (count(array_intersect($stackArray,$GroupOfEight[$i])) == count($stackArray) && count(array_intersect($stackArray,$GroupOfEight[$i])) == count($GroupOfEight[$i]));
if($containsSearch){
return $i; //This specifies which index in GroupOfEight contains a matching array
}
}
return -1;
}
// Calling the function that is given above.
echo searcheight($stackArray,$GroupOfEight);
?>
Any logical ideas or solutions will kindly be much appreciated. Thanks.
任何合乎逻辑的想法或解决方案将不胜感激。谢谢。
采纳答案by Baba
You can try
你可以试试
$GroupOfEight = array(
array(0,1,3,2,4,5,7,6),
array(4,5,6,7,15,12,13,14),
array(12,13,15,14,8,9,11,10),
array(2,6,14,10,3,7,15,11),
array(1,3,5,7,13,15,9,11),
array(0,4,12,8,1,5,13,9),
array(0,1,3,2,8,9,11,10));
$stackArray = array(0,4,12,1,9,8,5,13,9,2,5,2,10);
function searcheight($stackArray, $GroupOfEight) {
$list = array();
for($i = 0; $i < count($GroupOfEight); $i ++) {
$intercept = array_intersect($GroupOfEight[$i], $stackArray);
$len = count($intercept);
if ($len % 4 == 0) {
$list[$i] = $len;
}
}
arsort($list);
if (empty($list))
return - 1;
return key($list);
}
echo searcheight($stackArray, $GroupOfEight);
Output
输出
5
回答by Adder
This one is fast:
这个很快:
function contains_array($array){
foreach($array as $value){
if(is_array($value)) {
return true;
}
}
return false;
}

