检查数组是否等于更大的数组

时间:2019-12-11 14:51:35

标签: php arrays

我正在执行过滤器功能,我想知道是否有一种方法可以进行以下比较: 用户希望查看一些测试,并且这些测试中的每一个都有一个0/1数组,用户只需要查看其数组等于进行一次的测试即可。仅用于信息0=passed和`1 = Failed。

该数组使我成为用户

array(12) { [0]=> string(1) "0" [1]=> string(1) "0" [2]=> string(1) "0" [3]=> string(1) "0" [4]=> string(1) "0" [5]=> string(1) "0" [6]=> string(1) "0" [7]=> string(1) "0" [8]=> string(1) "0" [9]=> string(1) "0" [10]=> string(1) "1" [11]=> string(1) "1" }

要与之比较的随机测试数组

array(30) { [0]=> string(6) "passed" [1]=> string(6) "passed" [2]=> string(6) "passed" [3]=> string(6) "passed" [4]=> string(6) "passed" [5]=> string(6) "passed" [6]=> string(6) "passed" [7]=> string(6) "passed" [8]=> string(6) "passed" [9]=> string(6) "passed" [10]=> string(6) "passed" [11]=> string(6) "passed" [12]=> string(6) "passed" [13]=> string(6) "passed" [14]=> string(6) "passed" [15]=> string(6) "passed" [16]=> string(6) "passed" [17]=> string(6) "passed" [18]=> string(6) "passed" [19]=> string(6) "passed" [20]=> string(6) "passed" [21]=> string(6) "passed" [22]=> string(6) "passed" [23]=> string(6) "passed" [24]=> string(6) "passed" [25]=> string(6) "passed" [26]=> string(6) "passed" [27]=> string(6) "passed" [28]=> string(6) "passed" [29]=> string(6) "passed" }

users数组有12个长,然后我想知道是否可以采用此数组,看看它是否出现在大的array(30)中。假设大型数组中的第一个0-11位置等于用户,然后不进行检查,然后继续进行嵌套测试。

无效的代码示例:

for($i = 0; $i < sizeof($LargeArray; $i++)
{
  if($LargeArray['test'.$i][$i] == $UserArray)
  {
    echo"$LargeArray['test'.$i]";
    echo"is equal to users array.";
    exit(); //should stop checking this test1 and go check test2
  }
}

如何检查用户array(12)是否等于largeArray()中的第一个0-11?如果不是,则为1-12 .... 18-30。

2 个答案:

答案 0 :(得分:2)

我认为将这些数组转换为字符串,然后使用strpos()听起来像是一种确认较大数组是否包含较小数组的好方法:

$reference = array_values([0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0]);
$user      = array_values([0,0,0,0,0,0,0,0,0,0]);

$referenceString = implode(',', $reference);
$userString = implode(',', $user);

$matchStart = strpos($referenceString, $userString);
if ($matchStart === false) {
    // no match
}

// Starting offset in original array
echo $matchStart / 2;

array_values仅用于确保您具有数字索引。通过使用array_keys()将其与键名匹配,可以轻松地使您将该索引转换回原始键。

答案 1 :(得分:1)

未经测试,但首先,使数组具有相同类型的值。也许更改$UserArray以使用与$LargeArray相同的字符串:

$user = array_map(function($v) { return $v ? 'passed' : 'failed'; }, $UserArray);

然后从$LargeArray循环并切片12,并与$UserArray进行比较:

$i = 0;
while($test = array_slice($LargeArray, $i, 12)) {
    if($test === $user)) {
        //equal
    } else {
        //not equal
    }
    $i += 12;
}

array_slice的第四个参数是bool $preserve_keys = FALSE,因此切片将是基于0的索引,例如$UserArray