php 数组去重
一维数组
方法1:
array_unique($mobile_array);
方法2:
$mobile_array = array_flip($mobile_array);
$mobile_array = array_keys($mobile_array);
两方法比较
对于批量来说 后者效率更高,前者用起来挺方便
二维数组
没有现成的方法,用以下方法处理下
/**
* 二位数组去除重复值
* @param $arr 传入数组
* @param $key 判断的key值
* @return array
*/
function array_unset($arr,$key){ //$arr->传入数组 $key->判断的key值
//建立一个目标数组
$res = array();
foreach ($arr as $value) {
//查看有没有重复项
if(isset($res[$value[$key]])){
//有:销毁
unset($value[$key]);
}else{
$res[$value[$key]] = $value;
}
}
return $res;
}
二维数组去重另外一种方法
最近用到了一个获取历史会议列表的问题,需要去这个多维数组去重后返回返回给客户端,这里使用了几个php的组装函数,分享下,示例代码如下:
$str = '{
"status": 0,
"result": [
{
"hostName": "杨新",
"pcode2": "41675441",
"email": "xin.yang@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "杨新",
"pcode2": "41675441",
"email": "xin.yang@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "中信国安科技控股有限公司",
"pcode2": "9730284461",
"email": "liuxiao@gakj.xx.com",
"selfName": "邵兵"
},
{
"hostName": "中信国安科技控股有限公司",
"pcode2": "9730284461",
"email": "liuxiao@gakj.xx.com",
"selfName": "邵兵"
},
{
"hostName": "刘惠",
"pcode2": "64068956",
"email": "huijie.liu@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "刘惠",
"pcode2": "64068956",
"email": "huijie.liu@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "刘凯南",
"pcode2": "14818360",
"email": "kainan.liu_3@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "刘凯南",
"pcode2": "14818360",
"email": "kainan.liu_3@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "宋纬奇",
"pcode2": "62947142",
"email": "weiqi.song@xx.cn",
"selfName": "邵兵"
},
{
"hostName": "宋纬奇",
"pcode2": "62947142",
"email": "weiqi.song@xx.cn",
"selfName": "邵兵"
}
],
"content_type": "application/json"
}';
$res = json_decode($str, true);
echo 'num: ' . count($res['result']);
print_r($res['result']);
echo "";
$rrr = $res['result'];
$serializeArrs = array_map('serialize', $rrr);
$uniqueArrs = array_unique($serializeArrs);
$unserializeArrs = array_map('unserialize', $uniqueArrs);
print_r($unserializeArrs);
echo "";
echo json_encode($unserializeArrs);
关于php的序列化的确是几年前才使用的技术,目前大家更多的是使用json_encode,且后者效率也比php的序列化高。
序列化也还是很有用的。上面的例子中主要是函数array_map()和array_unique()的结合使用。