wangjiangze
我有一个二维数组。我想把里面重复的去掉
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]
<?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 ) ) ) )
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]

分类:

技术点:

相关文章: