PHP问题使用并将多个数组合并为一个

时间:2011-08-20 00:27:13

标签: php arrays sorting

我正在尝试优化搜索列表,以便当用户点击复选框时,它会根据所选条件细化搜索结果。这是我正在使用的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);

有人知道我能做什么吗?

3 个答案:

答案 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);

array_intersect()

答案 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()

  • 获取值