8

重複の可能性:
配列に別の配列のすべての要素が含まれているかどうかを確認する

私は以前にこのようなものをStackoverflowに投稿しましたが、答えは私を完全に満足させるものではありません。そのため、もう一度質問を投稿しますが、質問はずっと変更します。

array($GroupOfEight[$i])多次元の要素であるarray($GroupOfEight)が別の配列($ stackArray)と等しいかどうかを、配列内の番号の順序を無視してチェックする関数を作成するのを手伝ってくれた人もいます。

ただし、私がチェックする必要があるのは、言及されたものが多次元にarray($stackArray)別のものを含んでいるかどうかです。つまり、mainは。よりも多くの要素で構成できます。array($GroupOfEight[$i])array($GroupOfEight)array($stackArray)subarrays($GroupOfEight[$i])

これまでに収集した1つの動作するコードですが、必要なバージョンに変更する必要があります。

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

論理的なアイデアや解決策をいただければ幸いです。ありがとう。

4

2 に答える 2

9

これは速いです:

function contains_array($array){
    foreach($array as $value){
        if(is_array($value)) {
          return true;
        }
    }
    return false;
}
于 2012-10-17T14:51:35.373 に答える
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
于 2012-10-17T15:21:35.790 に答える