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

moz*_*ors 6 php arrays array-intersect multidimensional-array

我正在设计一个电气工程应用.但是,我坚持这个:我有以下数组

<?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)
                      );
?>
Run Code Online (Sandbox Code Playgroud)

我有另一个阵列,但这个是一维的.

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

我想要做的是检查$ 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;
}
?>
Run Code Online (Sandbox Code Playgroud)

请帮我纠正我的代码或向我介绍这个问题的解决方案,谢谢.

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

Asa*_*din 3

给定您的示例数组,其输出将是:

> 0
Run Code Online (Sandbox Code Playgroud)

如果您只能输出一个数字,则应该这样做:

<?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;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

编辑:做了一个函数。返回第一个匹配的索引,如果没有匹配则返回 -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);
Run Code Online (Sandbox Code Playgroud)