我想我可能会在概念上或在我的措辞中遗漏某些东西,因为我似乎无法找到我需要的东西。
每个用户都有一个数组,例如20个项目,比如
array(123,482,836,496,etc)
并希望找到具有最匹配元素的其他用户。我假设我不必循环并进行一系列查询。
有人能指出我正确的方向吗?我将其最终代码发布给其他任何人。
答案 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)
<?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
函数来查找最多的用户。