用PHP检查一个数组是不是包含另一个数组[重复]

Posted

技术标签:

【中文标题】用PHP检查一个数组是不是包含另一个数组[重复]【英文标题】:Check if an array contains another array with PHP [duplicate]用PHP检查一个数组是否包含另一个数组[重复] 【发布时间】:2012-10-17 14:43:58 【问题描述】:

可能重复:Checking if an array contains all elements of another array

我之前在 *** 上发布过类似的内容,但答案并不完全让我满意。这就是为什么我再次发布问题,但一直在更改问题。

有人帮我构建了一个函数,用于检查作为多维 array($GroupOfEight) 的元素的 array($GroupOfEight[$i]) 是否等于另一个数组 ($stackArray),而忽略数组中的数字排序。

但是,我需要检查的是提到的array($stackArray) 是否在多维array($GroupOfEight) 中包含任何另一个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);
?>

任何合乎逻辑的想法或解决方案将不胜感激。谢谢。

【问题讨论】:

你的预期结果是什么??? 对于假设的$stackArray,它应该给出4,即$GroupOfEight中包含的子数组索引号的索引 4 是 array(1,3,5,7,13,15,9,11)$stackArray = array(0,4,12,1,9,8,5,13,9,2,5,2,10); .. 你没看到列表中缺少 3 吗??? 哦,是的,但你明白了。它包含一个子数组和其他元素。我必须找到它包含哪一个,或者没有。 还没有......是什么让数组 4 最合格 【参考方案1】:

这个很快:

function contains_array($array)
    foreach($array as $value)
        if(is_array($value)) 
          return true;
        
    
    return false;

【讨论】:

总是使用方括号 ,即使是像你这样的单行者 return true;。每当您使用预处理器和宏进入语言时,这是一个值得的好习惯...... 您可以使用 FOR 循环,如果您需要数组的位置,则返回计数器。或者,不返回 true,而是返回数组键 $array。 我不认为这个完全符合我的要求,不过谢谢 我同意@moz 这是另一个问题的正确答案。我不知道为什么会有这么多 UV。【参考方案2】:

你可以试试

$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

【讨论】:

爸爸,我做了修改功能,我已经搬到了4组消除。请修改此代码并告诉我哪里错了。 ($GroupOfFour 有 16mem) function searchFourTerms($leftArray, $GroupOfFour) $len4 = count($leftArray); $list4 = 数组(); for($i4 = 0; $i4 我想我解决了,但还是有一些问题。当你在这里时,请把它移到聊天室。 这个答案无法解释,另一个答案(12 个 UV)是 100% 错误的。因此,此页面对研究人员的价值很低。

以上是关于用PHP检查一个数组是不是包含另一个数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

要检查数组是不是仅包含另一个数组中的元素,VB.NET

如何检查一个数组是不是包含另一个数组的任何元素

如何检查包含另一个对象数组的对象数组是不是具有属性

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

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素