所以,我有两个数组。首先$main
:
(
[0] => 4035
[1] => 10065
[2] => 10034
[3] => 10039
[4] => 4035 // <- this is key 0 from $inmain
[5] => 4035 // <- this is key 2 from $inmain
[6] => 4096 // <- this is key 1 from $inmain
)
第二个$inmain
看起来像这样:
(
[0] => 4035
[1] => 4096
[2] => 4035
)
我想检测来自$inmain
的所有密钥是否在$main
数组中相互“关闭”(无论顺序如何)。例如。您可以在键4,5,6上看到它们现在(但顺序不同)。
答案 0 :(得分:1)
$close = false;
$perm = compute_all_permutations($inmain); // perm is a set of permutations
for($i = 0; $i < (count($main) - count($inmain)); $i++)
{
$subperm = array();
for($j = 0; $j < count($inmain); $j++)
{
$subperm[$j] = $main[$i + $j];
}
if($subperm is in $perm)
{
$close = true;
}
}
if($close)
{
// keys are close
}
else
{
// keys aren't close
}
复杂度为O(N * M!),其中N是$ main的长度,M是$ inmain的长度
答案 1 :(得分:0)
此功能对您有所帮助:
function arrayclose($main, $inmain, $proximity=5/*adjust default here, or set on your function call*/){
foreach($inmain as $val){
$isclose=false;
foreach($main as $val2){
if(abs($val-$val2) <=$proximity)
$isclose=true;
}
if(! $isclose) return false;
}
return true;
}
它会循环播放您要检查的所有项目。然后在里面,它循环在更大的列表上。较小数组中的每个元素必须在$proximity
之内。如果没有命中,立即返回false。如果它通过所有循环而不返回false,则表示所有内容都在$proximity
内,因此我们返回true。
答案 2 :(得分:0)
我想我只是将这些数组转换为'字符串',如下所示:
$mainstr = "1000111"
和$inmainstr = "111"
并使用strpos()