array_unique
去重只能是一维数组的情况下,否则会报Array to string conversion
的错误,下面写了一个函数解决二维数组的去重
/**
* 二维数组去重
*/
public function array_unique_2d(array $arr2d)
{
//合并
$temp = array();
foreach ($arr2d as $k=>$v) {
$temp[$k] = join('@*', $v);
}
$temp = array_unique($temp);
//分割
foreach ($temp as $k=>$v) {
$temp[$k] = explode('@*', $v);
$return_info[$k]['SpuId'] = $temp[$k][0];
$return_info[$k]['SkuId'] = $temp[$k][1];
$return_info[$k]['SpuName'] = $temp[$k][2];
$return_info[$k]['SkuVector'] = $temp[$k][3];
$return_info[$k]['SkuNum'] = $temp[$k][4];
}
return $return_info;
}
join
拼接数组的时候,一定要用数组中不会出现的字符串拼接,防止分割的时候出现问题,我这里用的 @*
,因为基本上在我的数组里面不会出现,也可以用更复杂的字符串。
分割字符串的时候对应的键可以添加上
为防止二维数组里面的键随时改变,又写了一个通适的方法
/**
* 二维数组去重
*/
public static function array_unique_2d(array $arr2d)
{
//合并
$temp = array();
$n = 0;
$arrKeys = array();
foreach ($arr2d as $k=>$v) {
$temp[$k] = join('@*', $v);
if ($n == 0) {
$n++;
$arrKeys = array_keys($v); //获取二维数组里面所有的键
}
}
$temp = array_unique($temp);
//分割
foreach ($temp as $k=>$v) {
$temp[$k] = explode('@*', $v);
$m = 0;
foreach ($arrKeys as $key=>$value) { //遍历出来
$return_info[$k][$value] = $temp[$k][$m];
$m++;
}
}
return $return_info;
}