您好,欢迎访问一九零五行业门户网

PHP瓜分两个数组的相同元素和不同元素的两种方法

php分割两个数组的相同元素和不同元素的两种方法
一、举例说明例如有两个数组a和b(当然这个a和b也可以是key=>value形式)
a = array('tt','cc','dd','mm')b = array('ad','tt','cc','qq')希望得到的结果是:samearr = array('tt','cc')a = array('dd','mm')b = array('ad','qq')
二、解决方案2.1、方法一:for循环取出数据
1、for循环一个a数组;2、使用array_search判断元素是否存在b数组中;3、存在后unset a和b中的该元素;4、将该相同元素添加到samearr数组中具体代码:
 0){                        $samearr[] = $a[$i];                unset($a[$i]);                unset($b[$pos]);        }      }var_dump($samearr, $a, $b);
key value数组形式和此类似,只需要将for循环替换为foreach循环即可,下面看一下运行结果:
返回结果是我们预期的结果。
2.2、方案二:利用php内置函数array_diff和array_intersect
同样也可以使用array_diff分割,获取在a中而不在b中的元素或者在b中而不在a中的元素,但是无法获取相同元素,要获取相同元素的话,需要使用。array_intersect函数来获取,方法如下:
返回结果是:
也是正确的,预期结果。
三、方案对比  既然两种方案都能够满足我们现有的需求,那么接下来我们就来分析两种方法区别,以及哪种方法更优。
函数大小在千数级别时两者的效率是差不多的代码如下:
使用array_search和for循环执行
0){                        $samearr[] = $a[$i];                unset($a[$i]);                unset($b[$pos]);        }      }//var_dump($samearr, $a, $b);runtime('end'); function runtime($mod='')    {        static $first; //首次运行时间        static $prev; //上次时间        static $str;    //输出字符串        $time = explode(' ', microtime());        $curr = $time[1] . substr($time[0], 1, 7); // 1212466268.034119形式        //首次        if(!$first) {            $prev = $first = $curr+0;            //$str .= '开始:'.$first.'秒
';        }else if($mod == 'end'){            $str .= '本次: '.intval(($curr - $prev) * 100000)/100000 . '
';            //$str .= '结束: '.$curr.'秒
';            $str .= '总运行时间:'.intval(($curr - $first) * 100000)/100000 . '
';            echo $str;        }else{            $str .= '本次: '.intval(($curr - $prev) * 100000)/100000 . '
';            $prev = $curr;        }    }使用php的内置函数:
其它类似信息

推荐信息