如何将二维数组中相同的值去掉???

szjq 2005-09-29 12:15:36
例如:
array(5) {

[0]=> array(1) {[1]=> string(1) "a" }
[1]=> array(1) {[2]=> string(1) "b" }
[2]=> array(1) {[2]=> string(2) "b" }
[3]=> array(1) {[3]=> string(1) "b" }
[4]=> array(1) {[4]=> string(1) "c" }
}
现在我要将这个二维数组中,第二维数组中值相同的(例中值为b)key也相等的(例中key为2)去掉,只留一个,我想要的结果是:
array(5) {

[0]=> array(1) {[1]=> string(1) "a" }
[1]=> array(1) {[2]=> string(1) "b" }

[2]=> array(1) {[3]=> string(1) "b" }
[3]=> array(1) {[4]=> string(1) "c" }
}

大家有什么好的方法吗?
想了半天觉得不好下手,高手支招!
...全文
662 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
doomic 2005-09-30
  • 打赏
  • 举报
回复
array_unique
(PHP 4 >= 4.0.1, PHP 5)

array_unique -- 移除数组中重复的值
说明
array array_unique ( array array )


好好看一下手册吧。。
array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。

注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。

第一个单元将被保留。
xuzuning 2005-09-30
  • 打赏
  • 举报
回复
又看了一下你的问题,发现前面的答复是我看错了意思
不过var_dump的结果确实比较混乱,建议用var_export函数,这样产生的输出可以直接使用而不必改造


$arr=array(
0 => array(1=>'a'),
1 => array(2=>'b'),
2 => array(2=>'b'),
3 => array(3=>'b'),
4 => array(4=>'c')
);

foreach($arr as $i=>$vi) {
foreach($arr as $j=>$vj) {
if($i != $j && array_intersect_assoc($vi,$vj))
unset($arr[$i]);
}
}

var_export($arr);
surfchen 2005-09-30
  • 打赏
  • 举报
回复
<?php
$arr=array(
0=>array(1=>'a'),
1=>array(2=>'b'),
2=>array(2=>'b'),
3=>array(3=>'b'),
4=>array(4=>'c')
);
function removeArr($args,$the_key)
{
global $arr;
if (is_array($args))
{
foreach ($args as $key => $value)
{
$u_id=md5($value.'...'.$key.'key'.$value.'value');
if (in_array($u_id,$GLOBALS['arr_store']))
{

unset($arr[$key]);
}
else
{
$GLOBALS['arr_store'][]=$u_id;
}
}
}
}
array_walk( $arr,'removeArr');
var_dump($arr);
?>
xuzuning 2005-09-29
  • 打赏
  • 举报
回复
奇怪!难道变了吗?

array_unique
(PHP 4 >= 4.0.1, PHP 5)

array_unique -- 移除数组中重复的值
说明
array array_unique ( array array )


array_unique() 接受 array 作为输入并返回没有重复值的新数组。

注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。

注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。

第一个单元将被保留。

例子 1. array_unique() 例子

<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>

上例将输出:

Array
(
[a] => green
[0] => red
[1] => blue
)



szjq 2005-09-29
  • 打赏
  • 举报
回复
我不光是要最后的值,我要的是二维的下标(我的记录ID),这个二维的下标可以有相同的,但最后的值不能有相同的
按上面的做法,我二维的下标就没有了,我的下标不是数组自动分配的
szjq 2005-09-29
  • 打赏
  • 举报
回复
谢谢大家,我试试!
ashchen 2005-09-29
  • 打赏
  • 举报
回复
回调函数

不查手册要走弯路的
jimmyzhan 2005-09-29
  • 打赏
  • 举报
回复
$ar = array(
array("a"),
array("b", "b"),
array("b"),
array("c"),
);

$ar = array_map('array_unique', $ar);
var_dump($ar);

=======
唠叨大哥厉害...原来还有这么好用的函数,呵呵
xuzuning 2005-09-29
  • 打赏
  • 举报
回复
$ar = array(
array("a"),
array("b", "b"),
array("b"),
array("c"),
);

$ar = array_map('array_unique', $ar);
var_dump($ar);
szjq 2005-09-29
  • 打赏
  • 举报
回复
楼上哥们,我的数组做成二维的是为了存二维下标相同但值不同的值,比如:
array(6) {

[0]=> array(1) {[1]=> string(1) "a" }
[1]=> array(1) {[2]=> string(1) "b" }
[2]=> array(1) {[2]=> string(2) "b" }
[3]=> array(1) {[2]=> string(2) "f" }
[4]=> array(1) {[3]=> string(1) "b" }
[5]=> array(1) {[4]=> string(1) "c" }
}

其中下标为1,2,3的三个二维数组中值分别为:[2]=b,[2]=b,[2]=f 这三个值,我现在想要的是把两个重复的[2]=b去掉一个,组成下面这个形式
array(5) {

[0]=> array(1) {[1]=> string(1) "a" }
[1]=> array(1) {[2]=> string(1) "b" }

[2]=> array(1) {[2]=> string(2) "f" }
[3]=> array(1) {[3]=> string(1) "b" }
[4]=> array(1) {[4]=> string(1) "c" }
}

jimmyzhan 2005-09-29
  • 打赏
  • 举报
回复
$toOne=array();
$input=array(array("1"=>"a"),array("2"=>"b"),array("2"=>"b"),array("3"=>"b"),array("4"=>"c"));
/* 把2维数组化为1维 重复的元素便被消去 */
foreach($input AS $a)
{
foreach($a AS $k=>$v)
{
$toOne[$k]=$v;
}
}
/* 把1维数组toOne化为2维 */
$toTwo=array();
foreach($toOne AS $k=>$v)
{
$toTwo[]=array($k=>$v);
}
print_r($toTwo);

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧