在SQL和PHP中查找最接近的匹配数组

时间:2016-01-29 11:21:02

标签: php sql arrays

我想我可能会在概念上或在我的措辞中遗漏某些东西,因为我似乎无法找到我需要的东西。

每个用户都有一个数组,例如20个项目,比如

array(123,482,836,496,etc)

并希望找到具有最匹配元素的其他用户。我假设我不必循环并进行一系列查询。

有人能指出我正确的方向吗?我将其最终代码发布给其他任何人。

5 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

如果你有两个用户的数组,这应该在php方面做的伎俩。

$arr1 = array (1, 3, 5, 7);
$arr2 = array (1, 2, 5, 9);
$same = array_intersect($arr1, $arr2); 

print_r($same); // Returns array(1, 5);

它返回两个数组的交集。见http://php.net/manual/de/function.array-intersect.php

答案 2 :(得分:0)

你可以使用array_uintersect

<?php
function myfunction($v1,$v2) 
{
  if ($v1===$v2)
  {
    return 0;
  } 
  return 1;
}
$a1=array(1, 2, 4);
$a2=array(1, 3, 4);
print_r(array_uintersect($a1,$a2,"myfunction")); 
?>

答案 3 :(得分:0)

使用这个,虽然这可能是一个很长的方法:

$array1 = array("5","26","38","42");

$array2 = array("15","36","38","42");

$final_array = array();

foreach($array1 as $key=>$val){
    if(in_array($val,$array2)){
        $final_array[] = $val;
    }
}

print_r($final_array);
  

结果:数组([0] =&gt; 38 1 =&gt; 42)

其他方式您可以使用array_intersect method

$result = array_intersect($array1, $array2);

答案 4 :(得分:0)

我意识到我在考虑这个错误,安德烈亚斯帮助我走上正轨。我们不是像$user1 = array(12,18,34)那样为数据库中的每个用户创建一个数组,而是像这样存储每一对:

USER  |  VALUE
1     |  12
1     |  18
1     |  34
2     |  15
2     |  18
2     |  38

说我是$user3,并希望找到哪个用户与我分享最多的值12 17 42我可以遍历每个值,运行查询保存具有相同值的所有用户。

SELECT user FROM table WHERE value = $user3[0]; //save into $array1

对于每个值,只对此示例中的三个查询执行此操作。我将为每个查询留下一组匹配用户$array1 $array2 $array3。然后,我可以在这些数组上使用array_intersection函数来查找最多的用户。