我正在尝试优化搜索列表,以便当用户点击复选框时,它会根据所选条件细化搜索结果。这是我正在使用的PHP函数:
function($criteria_a,$criteria_b,$criteria_c,$criteria_d){
if($criteria_a==1){
// build array
$a_array=array($user_a,$user_e,$user_f);
}
if($criteria_b==1){
// build array
$b_array=array($user_a,$user_c,$user_e);
}
if($criteria_c==1){
// build array
$c_array=array($user_b);
}
if($criteria_d==1){
// build array
$d_array=array($user_a,$user_e);
}
$main_array = array_merge($a_array,$b_array,$c_array,$d_array);
}
基本上,当用户点击条件A复选框(可能类似于“显示30岁以下的那些”)时,它会构建$a_array
,其中包含符合条件的用户列表。
但问题是这样的:如果我将条件A,B和D指定为1,则会向符合任何条件的用户填充$main_array
,而不是符合所有标准。主阵列看起来像这样:
array($user_a,$user_e,$user_f,$user_a,$user_c,$user_e,$user_a,$user_e);
但我只希望它列出符合所有条件的用户:
array($user_a,$user_e);
这些用户符合指定的每个条件,而不是指定的任何条件。我也不确定这是否有帮助:
$acv = array_count_values($main_array);
arsort($acv);
$main_array = array_keys($acv);
有人知道我能做什么吗?
答案 0 :(得分:1)
那么,你想要一个包含所有给定数组中的用户的数组吗?这似乎是array_intersect
的一个简单案例。使用它来查看所有4个数组,它将创建一个包含每个数组中出现的所有值的数组。为了不丢弃所有值,您需要将所有数组设置为默认值,然后根据条件更改它们。
function($criteria_a,$criteria_b,$criteria_c,$criteria_d){
$a_array = $b_array = $c_array = $d_array = array($user_a,$user_b,$user_c,$user_d,$user_e,$user_f);
if($criteria_a==1) $a_array=array($user_a,$user_e,$user_f);
if($criteria_b==1) $b_array=array($user_a,$user_c,$user_e);
if($criteria_c==1) $c_array=array($user_b);
if($criteria_d==1) $d_array=array($user_a,$user_e);
$main_array = array_intersect($a_array,$b_array,$c_array,$d_array);
}
在此示例中,您将根据条件限制用户的数量,而不是设置可能的用户。尝试使用array_intersect
函数时,您也不会收到任何未定义变量的通知错误。
答案 1 :(得分:0)
只需改变:
array_merge($a_array,$b_array,$c_array,$d_array);
要:
array_intersect($a_array,$b_array,$c_array,$d_array);
答案 2 :(得分:0)
array_merge()
通过将一个数组“粘合”到另一个数组来工作,但它不会检查以确保这些值是唯一的。
您可以通过两种方式解决问题:
使用array_merge()
后跟array_unique()
删除重复值
将这些数组转换为关联数组,如下所示:
if($criteria_a==1){
// build array
$a_array=array($user_a,$user_e,$user_f);
}
在关联数组上使用array_merge()
时,每个键只有一个值。然后,您可以使用array_values()