我正在执行过滤器功能,我想知道是否有一种方法可以进行以下比较:
用户希望查看一些测试,并且这些测试中的每一个都有一个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。
答案 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
。