Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if an array contains another array with PHP [duplicate]

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.

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.

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]).

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.

like image 557
mozcelikors Avatar asked Oct 17 '12 14:10

mozcelikors


2 Answers

This one is fast:

function contains_array($array){
    foreach($array as $value){
        if(is_array($value)) {
          return true;
        }
    }
    return false;
}
like image 125
Adder Avatar answered Sep 29 '22 10:09

Adder


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
like image 29
Baba Avatar answered Sep 29 '22 09:09

Baba