数组去重复处理 我有一个二维数组。我想把里面重复的去掉 taylorr (2008-11-25 11:28:46) 首先,要定义“重复”;其次,要给一点基本的数据:对数字和字符串和对象的判断操作是可以、也是应该不一样的; leehui1983 (2008-11-25 11:32:36) foreach ,unset wangdezhi (2008-11-25 11:36:43) QUOTE: 原帖由 leehui1983 于 2008-11-25 11:32 发表 foreach ,unset yafeikf (2008-11-25 11:46:57) array_unique?? karas9 (2008-11-25 11:48:03) array_unique xu569874 (2008-11-25 12:36:38) array_unique 对二维的不好使 liexusong (2008-11-25 12:45:02) 二,三维.....数组用递归!!偶最喜欢的方法!! xu569874 (2008-11-25 12:51:13) 递归还怎么做 liexusong (2008-11-25 14:15:04) 想了很久,希望能帮到你!!N维数组都可以的!! [php]<?phpfunction &kill_array_same($array) { $leng = count($array); for($i = 0 ; $i < $leng ; $i++) { if(is_array($array[$i]) && count($array[$i]) > 0) { $array[$i] = &kill_array_same($array[$i]); } else { for($j = $i + 1 ; $j < $leng ; $j++) { if($array[$i] == $array[$j]) { unset($array[$j]); } } } } return $array;}$array = array('hello',2,3,'hello',2,3,array(1,1,2,2,array(1,1,2,2,array(1,2,3,1,2,3))));print_r(kill_array_same($array));?>[/php]输出:Array ( [0] => hello [1] => 2 [2] => 3 [6] => Array ( [0] => 1 [2] => 2 [4] => Array ( [0] => 1 [2] => 2 [4] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) ) ) studyphp (2008-11-25 15:24:30) LS不错,用的是递归。N维都行。 异度冰晶 (2008-11-25 16:27:00) 也许想要的是这种,事实上这个函数我一直在用,因为有需求[php]function uniqueByChild($array, $child){ $child = "['" . implode("']['", explode(',', $child)) . "']"; $buffer = array(); foreach($array as $index => $value) { eval("\$check = \$value{$child};"); if(in_array($check, $buffer)) { unset($array[$index]); } else { $buffer[] = $check; } } return $array;}$array = array(array('id' => 1, 'name' => 'name1'), array('id' => 2, 'name' => 'name2'), array('id'=>1, 'name' => 'name1'));$array2 = uniqueByChild($array, 'id');print_r($array2); //array(array('id' => 1, 'name'=>'name1'), array('id' => 2, 'name' => 'name2'));[/php]另外附赠一个多维数组排序函数,与上面的函数类似[php]function sortByChild(&$array, $child, $asc = true, $keepAssoc = false){ $child = "['" . implode("']['", explode(',', $child)) . "']"; if($asc) { $sortFunc = create_function('$a, $b',"return \$a{$child} - \$b{$child};"); } else { $sortFunc = create_function('$a, $b',"return \$b{$child} - \$a{$child};"); } if($keepAssoc) { uasort($array, $sortFunc); } else { usort($array, $sortFunc); }}[/php]
其次,要给一点基本的数据:对数字和字符串和对象的判断操作是可以、也是应该不一样的;
QUOTE:
??
[php]
<?php
function &kill_array_same($array) {
$leng = count($array);
for($i = 0 ; $i < $leng ; $i++) {
if(is_array($array[$i]) && count($array[$i]) > 0) {
$array[$i] = &kill_array_same($array[$i]);
} else {
for($j = $i + 1 ; $j < $leng ; $j++) {
if($array[$i] == $array[$j]) {
unset($array[$j]);
}
}
}
}
return $array;
}
$array = array('hello',2,3,'hello',2,3,array(1,1,2,2,array(1,1,2,2,array(1,2,3,1,2,3))));
print_r(kill_array_same($array));
?>
[/php]
输出:
Array ( [0] => hello [1] => 2 [2] => 3 [6] => Array ( [0] => 1 [2] => 2 [4] => Array ( [0] => 1 [2] => 2 [4] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) ) )
[php]
function uniqueByChild($array, $child)
{
$child = "['" . implode("']['", explode(',', $child)) . "']";
$buffer = array();
foreach($array as $index => $value)
{
eval("\$check = \$value{$child};");
if(in_array($check, $buffer))
{
unset($array[$index]);
}
else
{
$buffer[] = $check;
}
}
return $array;
}
$array = array(array('id' => 1, 'name' => 'name1'), array('id' => 2, 'name' => 'name2'), array('id'=>1, 'name' => 'name1'));
$array2 = uniqueByChild($array, 'id');
print_r($array2); //array(array('id' => 1, 'name'=>'name1'), array('id' => 2, 'name' => 'name2'));
[/php]
另外附赠一个多维数组排序函数,与上面的函数类似
[php]
function sortByChild(&$array, $child, $asc = true, $keepAssoc = false)
{
$child = "['" . implode("']['", explode(',', $child)) . "']";
if($asc)
{
$sortFunc = create_function('$a, $b',"return \$a{$child} - \$b{$child};");
}
else
{
$sortFunc = create_function('$a, $b',"return \$b{$child} - \$a{$child};");
}
if($keepAssoc)
{
uasort($array, $sortFunc);
}
else
{
usort($array, $sortFunc);
}
}
[/php]