现有如下一个二维数组,需要根据一些要求完成相关操作
$a = array(
array('id'=>1,'name'=>'tom','age'=>21),
array('id'=>2,'name'=>'jack','age'=>20),
array('id'=>3,'name'=>'jone','age'=>22),
array('id'=>1,'name'=>'fafa','age'=>10),
array('id'=>4,'name'=>'tom','age'=>23),
array('id'=>2,'name'=>'jone','age'=>22),
array('id'=>2,'name'=>'jone','age'=>22),
);
1 合并数组a中完全重复信息,返回一个新数组
代码块:
@plan A
function array_unique_fb($array2D){
foreach ($array2D as $v){
$v=join(',',$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[]=$v;
}
$temp=array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k]=explode(',',$v); //再将拆开的数组重新组装
}
return $temp;
}
var_dump(array_unique_fb($a));
------------------------------------------------------------------------
@plan B
function array_unique_fb($array2D){
foreach ($array2D as $k=>$v){
$v=join(',',$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[$k]=$v;
}
$temp=array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$array=explode(',',$v); //再将拆开的数组重新组装
//下面的索引根据自己的情况进行修改即可
$temp2[$k]['id'] =$array[0];
$temp2[$k]['name'] =$array[1];
$temp2[$k]['age'] =$array[2];
}
return $temp2;
}
var_dump(array_unique_fb($a));
返回结果:
array(6) {
[0]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(3) "tom"
[2]=>
string(2) "21"
}
[1]=>
array(3) {
[0]=>
string(1) "2"
[1]=>
string(4) "jack"
[2]=>
string(2) "20"
}
[2]=>
array(3) {
[0]=>
string(1) "3"
[1]=>
string(4) "jone"
[2]=>
string(2) "22"
}
[3]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(4) "fafa"
[2]=>
string(2) "10"
}
[4]=>
array(3) {
[0]=>
string(1) "4"
[1]=>
string(3) "tom"
[2]=>
string(2) "23"
}
[5]=>
array(3) {
[0]=>
string(1) "2"
[1]=>
string(4) "jone"
[2]=>
string(2) "22"
}
}
2 合并数组a中以某个字段(‘id’)一致的数组,合并保留第一个
代码块:
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
$result = unique_multidim_array($a,'id');
var_dump($result);
返回结果:
array(4) {
[0]=>
array(3) {
["id"]=>
int(1)
["name"]=>
string(3) "tom"
["age"]=>
int(21)
}
[1]=>
array(3) {
["id"]=>
int(2)
["name"]=>
string(4) "jack"
["age"]=>
int(20)
}
[2]=>
array(3) {
["id"]=>
int(3)
["name"]=>
string(4) "jone"
["age"]=>
int(22)
}
[4]=>
array(3) {
["id"]=>
int(4)
["name"]=>
string(3) "tom"
["age"]=>
int(23)
}
}
3 合并数组a中以某个字段(‘id’)一致的数组,合并保留最后一个
代码块:
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
sort($array); //给数组倒叙,调用上面的方法
foreach($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
$result = unique_multidim_array($a,'id');
var_dump($result);
返回结果:
这里写代码片
————————————————————————————————
$b = array(
(object)array('id'=>1,'name'=>'tom','age'=>21),
(object)array('id'=>2,'name'=>'jack','age'=>20),
(object)array('id'=>3,'name'=>'jone','age'=>22),
(object)array('id'=>1,'name'=>'fafa','age'=>10),
(object)array('id'=>4,'name'=>'tom','age'=>23),
(object)array('id'=>2,'name'=>'jone','age'=>22),
(object)array('id'=>2,'name'=>'jone','age'=>22),
);
4 合并数组b中完全重复信息,返回一个新数组
5 合并数组b中以某个字段(‘id’)一致的数组,合并保留第一个
6 合并数组b中以某个字段(‘id’)一致的数组,合并保留最后一个
这种数据结构的出现,一般都是 json转array的时候 出现的问题,它的数据格式是一种 外层array 内层object的方式,在这里想到的解决方案是:
$b = json_decode(json_encode($b),true);
//note: 最好是在jsone_decode('对象',true);
//新增true属性后 数据格式就变成我们喜闻乐见的 二维数组啦。
附带url:
http://php.net/manual/zh/function.json-decode.php
备注:
随时欢迎大家发表评论,就数组处理速度方面,如何优化,也可以q小编:360882750