php文件中
$urlf="a.html,b.html,c.html";
$urls="g.html,b.html,d.html";
$urlc="a.html,f.html,d.html";
$arr_f=explode(',',$urlf);
$arr_s=explode(',',$urls);
$arr_c=explode(',',$urlc);
$result_c = array_intersect_assoc($arr_f, $arr_s,$arr_c);上面的函数可取到上面三个数组中的共同的值
可如果$result_c 为空值,此时我就需要用 第一个数组与第二个数组去取相同值了,
如果又是空值,那就要用第一个数组与第三个数组去取相同值了,如果又是空值,就要用第二个数组与第三个数组去取相同值了,(用if else的思想不太好,因为当有第四个数组,第五个数组时,代码量会很大)这怎么实现呀,大家帮我写写
thanks

解决方案 »

  1.   

    刚才好像有个人问过这个问题。。
    理论上支持任意多array比较,未经过测试,2个小时候后下班回家可以测试一下~<?php
    //计算组合;$arr中取$n个元素的所有情况
    function array_combination(array $arr,$n){
    $result = array($arr);
    $m = count($arr);

    while($m>$n){
    foreach($result as $tmp){
    $a = $tmp;
    for($i=$m-1;$i>=0;$i--){
    $result[] = unset($a[$i]);
    $a = $tmp;
    }
    unset($tmp);
    }
    $m--;
    }

    return $result;
    }function my_array_intersect_assoc(){
    //参数列表
    $ar = func_get_args();
    //删除空数组
    foreach($ar as $k=>$v) {
    if(! $v) unset($ar[$k]);
    }

    $n = count($ar);
    //从最大匹配开始,遇到交集不为空则返回
    while($n>1){
    $arr = array_combination($ar,$n);
    foreach($arr as $a){
    $result = call_user_func_array('array_intersect_assoc', $a);
    if(!empty($result))
    return $result;
    }
    $n--;
    }
    return $result;
    }$urlf="a.html,b.html,c.html";
    $urls="g.html,b.html,d.html";
    $urlc="a.html,f.html,d.html";
    $arr_f=explode(',',$urlf);
    $arr_s=explode(',',$urls);
    $arr_c=explode(',',$urlc);print_r(my_array_intersect_assoc($arr_f, array(), $arr_s, $arr_c, array()));
    ?>
      

  2.   

    这与交集已经无关了
    $urlf="a.html,b.html,c.html";
    $urls="g.html,b.html,d.html";
    $urlc="a.html,f.html,d.html";
    $arr_f=explode(',',$urlf);
    $arr_s=explode(',',$urls);
    $arr_c=explode(',',$urlc);
    $result_c = foo($arr_f, $arr_s,$arr_c);
    print_r($result_c);function foo() {
      foreach(func_get_args() as $c) {
        foreach((array)$c as $v) {
          $r[$v]++;
        }
      }
      if(max($r)<2) return array();
      return array_keys($r, max($r));
    }
      

  3.   

    function foo() {
      foreach(func_get_args() as $c) { //读取并遍历传入的参数(若干的数组)
        foreach((array)$c as $v) { //遍历数组,取得每个成员的值
          $r[$v]++; //以数组成员的值为键计数,及统计每个值出现的次数
        }
      }
      if(max($r)<2) return array(); //如果没有值重复出现则返回空数组,不返回false是因为为便于后继处理
      return array_keys($r, max($r));//否则返回出现次数最多的元素集合
    }