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
$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
$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 )
$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的呀,
$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;
}
//计算组合;$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()));
?>
$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 )