Php 检查一个数组是否包含另一个数组的所有元素

Php 检查一个数组是否包含另一个数组的所有元素,php,arrays,multidimensional-array,array-intersect,Php,Arrays,Multidimensional Array,Array Intersect,我正在设计一个电子工程应用程序。然而,我被困在这一点上: 我有以下数组 <?php // Static Array $GroupOfEight = array ( array(0,1,3,2,4,5,7,6), array(4,5,6,7,16,12,13,14), array(12,13,15,14,8,9,11,10),

我正在设计一个电子工程应用程序。然而,我被困在这一点上: 我有以下数组

<?php 
// Static Array
$GroupOfEight = array (
                      array(0,1,3,2,4,5,7,6),
                      array(4,5,6,7,16,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)
                      );
?>

我有另一个数组,但这个是一维的

<?php
$myStack = array(0,1,3,2,4,5,7,6); //Dynamic, gets value by POST method.
?>

我要做的是检查$myStack是否等于$GroupOfEight数组的任何子数组。(数字顺序并不重要。脚本只需检查每个元素是否包含。它们的顺序是否相同并不重要。)

以下是我迄今为止为解决这个问题所做的工作:

<?php
//Check if stackArray contains 8group
for($i=0; $i<count($GroupOfEight);$i++)
for($j=0; $j<count($GroupOfEight[$i]); $j++){
    //$containsSearch = count(array_intersect($search_this,$all)) == count($search_this);
    $containsSearch = count(array_intersect($stackArray,$GroupOfEight[$j])) == count($stackArray);
    echo $containsSearch;
}
?>

请帮助我更正代码或向我介绍此问题的解决方案, 谢谢

编辑:它应该只给出一个索引号。例如,stackArray是0,1,3,2,4,1,2,3,它应该找到与相同数字匹配的GroupOfEight[N],而不管数字的顺序如何。如果有匹配的案例,我应该得到N。

您可以尝试:

$searchKeys = array();
foreach ( $GroupOfEight as $key => $values ) {
    (count(array_intersect($values, $myStack)) == count($myStack)) and $searchKeys[] = $key;
}

#Output all keys it found same match
var_dump($searchKeys);

#OR Output Each Array it found a match
foreach($searchKeys as $key)
{
    var_dump($GroupOfEight[$key]);
}

给定示例阵列,其输出将为:

> 0
如果您必须只有一个数字输出,则应这样做:

<?php
//Check if stackArray contains 8group
$check=false;
for($i=0; $i<count($GroupOfEight);$i++){
    //$containsSearch = count(array_intersect($search_this,$all)) == count($search_this);
    $containsSearch = (count(array_intersect($stackArray,$GroupOfEight[$i])) == count($stackArray) && count(array_intersect($stackArray,$GroupOfEight[$i])) == count($GroupOfEight[$i]));
    if($containsSearch && !$check){
        echo $i; //This specifies which index in GroupOfEight contains a matching array
        $check=true;
    }
}
?>

编辑:制作一个函数。返回第一个匹配的索引,如果没有匹配,则返回-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;
}
echo searcheight($stackArray,$GroupOfEight);
函数searcheight($stackArray,$GroupOfEight){

对于($i=0;$i您正在比较
count
,这是不够的,因为数字可能会更改。请尝试以下操作:

// Static Array
$GroupOfEight = array (
    array(0,1,3,2,4,5,7,6),
    array(4,5,6,7,16,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)
    );

$myStack = array(0,1,3,2,4,5,7,6); //Dynamic, gets value by POST method.

$containsSearch = false;
foreach($GroupOfEight as $key => $value){
    if ($myStack == $value) {
        $containsSearch = true;
    }

}

var_dump($containsSearch);

计算$GroupOfEight[$i]的总数
计算$myStack的总数
如果总数相等:
在循环中-
如果$myStack[$c]在_数组($GroupOfEight[$i]):$equal=1
else$equal=0;退出;


如果$equal==1->数组是相同的

那么您最初的方法的错误之处在于您在GroupOfEight中循环了两次。您有两个for循环。
首先选择GroupOfEight中的每个数组,然后在第二个for循环中遍历数组的每个值

如果您想使用原始方法,请去掉额外的for循环:

echo "Hello, World!";
$GroupOfEight = array (
              array(0,1,3,2,4,5,7,6),
              array(4,5,6,7,16,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)
              );

$myStack = array(0,1,3,2,4,5,7,6); //Dynamic, gets value by POST method.


for($i=0; $i<count($GroupOfEight);$i++) {       
    $containsSearch = count(array_intersect($myStack,$GroupOfEight[$i])) == count($myStack);
    if($containsSearch===true) {
        echo "Woo! GroupOfEight[$i], <br/>" . print_r($GroupOfEight[$i], true) . "<br/>==<br/>" . print_r($myStack, true);
    }
}
echo“你好,世界!”;
$GroupOfEight=数组(
数组(0,1,3,2,4,5,7,6),
阵列(4,5,6,7,16,12,13,14),
阵列(12,13,15,14,8,9,11,10),
阵列(2,6,14,10,3,7,15,11),
数组(1,3,5,7,13,15,9,11),
数组(0,4,12,8,1,5,13,9),
数组(0,1,3,2,8,9,11,10)
);
$myStack=array(0,1,3,2,4,5,7,6);//动态,通过POST方法获取值。

对于($i=0;$i我们不需要任何循环。试试这个

<?php 
$GroupOfEight = array (
                      array(0,1,3,2,4,5,7,6),
                      array(4,5,6,7,16,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)
                      );
$myStack = array(0,1,3,2,4,5,7,6);

$key = '';
$key = array_search($myStack,$GroupOfEight);
echo $key;
?>

输出

0


注意:输出
$key
是数组在$GroupOfEight中的位置,即($GroupOfEight[0])

您是否在某处分配了$stackarray?另外,您不需要两个循环;一个循环很好。是的,但我需要检查所有GROUP OFEIGHT行。第一个循环检查GROUP OFEIGHT的所有值。请更好地格式化您的代码,并在代码段周围使用代码示例。错误似乎已消失,但我要问您一些问题。我该如何处理检查$GroupOfEight中每个索引的$stackArray,如果有索引号,则返回索引号。这将完全解决我的问题并节省我一些时间。谢谢。当运行array\u intersect时,将返回一个填充了这两个索引中的值的数组。我已对其进行编辑,以同时回显该数字。因此,如果您得到true0true1false2true3…那么eans stackArray匹配0,1,3等。显然,您希望做一些比只回显索引更好的事情。实际上这不是我要求的,它应该只给出1个索引号。例如,stackArray是0,1,3,2,4,1,2,3,它应该找到GroupOfEight[N]无论数字的顺序如何,它都匹配相同的数字。如果有匹配的情况,我应该得到N。请帮助。谢谢。有一个问题,我必须检查两个方向的交点。现在修复了,(count(array_intersect($values,$myStack))==count($myStack))和$searchKeys[]=$key;此行遇到一个问题它工作正常…另请参见..您使用的PHP版本是什么???警告:array_intersect()[函数.array intersect]:参数#2不是第1771行array(0){上的\scripts\script.PHP中的数组这就是我遇到的错误。请注意,我使用了
$myStack
??您同时拥有$stackArray和$myStack…我确信这就是遗漏的地方。是的,我错键入了myStack,我明白了。但这就是我寻求的:它应该只给出1个索引号。例如,stackArray是0,1,3,2,4,1,2,3,它应该找到GroupOfEight[N]无论数字的顺序如何,它都匹配相同的数字。如果有匹配的案例,我应该只得到1个N数字。请帮助。谢谢
<?php 
$GroupOfEight = array (
                      array(0,1,3,2,4,5,7,6),
                      array(4,5,6,7,16,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)
                      );
$myStack = array(0,1,3,2,4,5,7,6);

$key = '';
$key = array_search($myStack,$GroupOfEight);
echo $key;
?>