PHP二维数组去重复项自定义函数
如果我们是一维数据去重复项就不要说了有直接的函数了,但二维数据php未提供函数了,下面小编来给大家推荐两个不错的二维数组去重复项自定义函数吧.
例1代码如下:
<?php
function unique_array_2d($array2D, $stkeep = false, $ndformat = true) {
// 判断是否保留一级数组键 (一级数组键可以为非数字)
if ($stkeep) $stArr = array_keys($array2D);
// 判断是否保留二级数组键 (所有二级数组键必须相同)
if ($ndformat) $ndArr = array_keys(end($array2D));
//降维,也可以用implode,将一维数组转换为用逗号连接的字符串
foreach ($array2D as $v) {
$v = join(",", $v);
$temp[] = $v;
}
//去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
//再将拆开的数组重新组装
foreach ($temp as $k => $v) {
if ($stkeep) $k = $stArr[$k];
if ($ndformat) {
$tempArr = explode(",", $v);
foreach ($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
$array2D = array(
'first' => array(
'title' => '1111',
'date' => '2222'
) ,
'second' => array(
'title' => '1111',
'date' => '2222'
) ,
'third' => array(
'title' => '2222',
'date' => '3333'
)
);
echo "<pre>";
print_r(unique_array_2d($array2D, true));
/**
* 将二维数组通过指定的 key 去重
*
* @param array $arr 要去重的数组
* @param array $by 指定key去重,该参数不指定将返回 array()
* @return array
*/
function array_multunique($arr, $by = array()) {
$temp = array();
foreach ($arr as $key => $val) {
foreach ($by as $v) {
$temp[$key].= isset($val[$v]) ? $val[$v] : '';
}
}
return array_intersect_key($arr, array_unique($temp));
}
/*$aa = array (
array ('id' => 123, 'name' => '张三' ),
array ('id' => 123, 'name' => '李四' ),
array ('id' => 124, 'name' => '王五' ),
array ('id' => 125, 'name' => '赵六' ),
array ('id' => 126, 'name' => '赵六' )
);
$key = 'id';
array_multunique ($aa, array('id')); */
function array_remove_key($array, $keys) {
if (!is_array($array) || !is_array($keys)) {
return false;
}
foreach ($array as $t) {
foreach ($keys as $k) {
unset($t[$k]);
}
$doc[] = $t;
}
return $doc;
}
/*$array = array(
'0' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')),
'1' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee'))
);
print_r( array_remove_key($array,array('c')));*/
function array_remove_key_val(&$a, $b, $c) {
foreach ($a as $key => $value) {
if (isset($value[$b]) && ($value[$b] == $c)) {
unset($a[$key]);
}
}
}
/*$a=array(
array('id'=>1,'num'=>10,'type'=>'news'),
array('id'=>2,'num'=>100,'type'=>'pic')
);
print_r( array_remove_key_val($a,"id","1") );*/
//例2代码如下:
//二维数组去掉重复值
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;
}
//二维数组去掉重复值 并保留键值
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]["litpic"] = $array[1];
$temp2[$k]["title"] = $array[2];
$temp2[$k]["address"] = $array[3];
$temp2[$k]["starttime"] = $array[4];
$temp2[$k]["endtime"] = $array[5];
$temp2[$k]["classid"] = $array[6];
$temp2[$k]["ename"] = $array[7];
}
return $temp2;
}
?>本文地址:http://www.phprm.com/shuzu/fs3659.html
转载随意,但请附上文章地址:-)