工作遇到一个问题,需要给二维数组去重,便想到了array_unique(),然而使用后发现报错,查看手册才明白本函数只适用于一维数组,那二位数组呢?查看了下手册没找到;只能自己动手编写了:
function more_array_unique($arr = array())
{
foreach ($arr[0] as $k => $v) {
$arr_inner_key[] = $k; //先把二维数组中的内层数组的键值记录在在一维数组中
}
// $temp= [];
foreach ($arr as $k => $v) {
$v = join(",", $v); //降维 用implode()也行
$temp[$k] = $v; //保留原来的键值 $temp[]即为不保留原来键值
}
$temp = array_unique($temp); //去重:去掉重复的字符串
foreach ($temp as $k => $v) {
$a = explode(",", $v); //拆分后的重组 如:Array( [0] => james [1] => 30 )
$arr_after[$k] = array_combine($arr_inner_key, $a); //将原来的键与值重新合并
}
//ksort($arr_after);//排序如需要:ksort对数组进行排序(保留原键值key) ,sort为不保留key值
return $arr_after;
}
原理还是一样的,遇到更高维了,可以先调用低维函数转换。把解决不了的问题,转化成为我们可以解决的问题
网友评论