检查一个 PHP 数组是否包含另一个数组

8

可能是重复问题:
检查一个数组是否包含另一个数组的所有元素

我之前在Stackoverflow上发布过类似的问题,但答案并没有完全满足我的需求。这就是为什么我再次发布问题,但同时更改了问题。

一些人帮助我构建了一个函数,检查一个多维数组array($GroupOfEight)中的元素array($GroupOfEight[$i])是否等于另一个数组$stackArray,忽略数组中元素的顺序。

然而,我需要检查的是所提到的array($stackArray)是否包含多维数组array($GroupOfEight[$i])中的任何一个,也就是说,主数组array($stackArray)可以比子数组subarrays($GroupOfEight[$i])包含更多的元素。

这是目前我收集到的一个可行的代码,但需要修改成我想要的版本:

 <?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);
?>

非常感谢您提供任何关于IT技术方面的逻辑想法或解决方案。谢谢。


还不太行..是什么让数组4最合适呢? - Baba
即使 array(0,4,12,8,1,5,13,9) 中要搜索的数字 4 比其他数字多。 - Baba
所以 $stackArray 的长度与结果无关...你只是在检查 16 8 4 等可能性吗??? - Baba
哈哈,等一下我正在为您编写脚本。 - Baba
那个 %4 的术语从哪里来的呢?我只是在想。 - mozcelikors
显示剩余17条评论
2个回答

9
这个很快:
function contains_array($array){
    foreach($array as $value){
        if(is_array($value)) {
          return true;
        }
    }
    return false;
}

1
始终使用块括号 {},即使像你的 return true; 这样只有一行。这是一个好习惯,每当你使用预处理器和宏时都会受益。 - Marcin Orlowski
你可以使用FOR循环,如果需要数组的位置,则返回计数器。或者,不要返回true,而是返回数组键$array。 - Shawn Wernig
2
我不认为这个完全符合我的要求,不过还是谢谢。 - mozcelikors
1
我同意@moz的观点。这是对另一个问题的正确答案。我不知道为什么会有这么多UVs。 - mickmackusa

3
你可以尝试。
$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);

输出

5

爸爸,我已经写了修改函数并且改成了四组消除,请检查这段代码并告诉我哪里错了。 ($GroupOfFour有16个元素) function searchFourTerms($leftArray, $GroupOfFour) { $len4 = count($leftArray); $list4 = array(); for($i4 = 0; $i4 < count($GroupOfFour); $i4 ++) { $intercept4 = array_intersect($GroupOfFour[$i4], $leftArray); $len4 = count($intercept4); if (count($intercept4) % 4 == 0) { $list4[$i4] = $len4; } } arsort($list4); if (empty($list4)) return - 1; return key($list4); } - mozcelikors
我觉得我解决了它,但仍然有一些问题。请在你到这里时将其转移到聊天中。 - mozcelikors
1
这个答案没有解释,而另一个答案(有12个UV)是100%错误的。因此,对于研究人员来说,这个页面的价值很低。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接