php文件中$urlf="a.html,b.html,c.html";
$urls="a.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);这样我可取到上面三个数组中的共同的值a.html
可如果$result_c 为空值,此时我就需要用 第一个数组与第二个数组去取相同值了,
如果此时还是空值,那就要用第一个数组与第三个数组去取相同值了,如果此时还是空值,就要用第二个数组与第三个数组去取相同值了,(用if else的思想不太好,因为当有第四个数组,第五个数组时,代码量会很大)
这怎么实现呀,大家帮我写写
thanks

解决方案 »

  1.   

    function my_array_intersect_assoc() {
      $ar = func_get_args();
      foreach($ar as $k=>$v) {
        if(! $v) unset($ar[$k]);
      }
      return call_user_func_array('array_intersect_assoc', $ar);
    }print_r(my_array_intersect_assoc($arr_f, array(), $arr_s, $arr_c, array()));Array ( [0] => a.html )
      

  2.   

    多谢一楼的
    $urlf="a.html,b.html,c.html";
    $urls="g.html,b.html,d.html";//把a修改成g
    $urlc="a.html,f.html,d.html";print_r(my_array_intersect_assoc($arr_f, $arr_s, $arr_c));
    怎么会输出空呢,应该是输出 第一个数组与第二个数组的交集 b.html的呀,
      

  3.   

    try:$urlf="a.html,b.html,c.html";
    $urls="g.html,b.html,d.html";//把a修改成g
    $urlc="a.html,f.html,d.html";$all = array($urlf,$urls,$urlc);
    $alls = explode(',',implode(',',$all));
    if($r = my_array_intersect_assoc( $alls ))
    {
       echo $r;
    }
    function my_array_intersect_assoc( $array )
    {
    $tmp = array();
    foreach((array)$array as $k=>$v)
    {
    if( in_array( $v , $tmp))
    {
    return $v;
    }
    $tmp[] = $v;
    }
    return false;
    }
      

  4.   

    LZ试试这个吧,我PHP服务器启动不了了,没测试过<?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()));
    ?>
      

  5.   

    其实这与交集已经无关了
    $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));
    }
    Array ( [0] => a.html [1] => b.html [2] => d.html )