不确定这个问题是否是需要删除的副本,但我在其他地方找不到答案,所以我会试着问一下。
我得到了一个二维数组,如下所示:
Array
(
[0] => Array
(
[0] => dave
[1] => jones
[2] => c@b.c
)
[1] => Array
(
[0] => john
[1] => jones
[2] => a@b.c
)
[2] => Array
(
[0] => bruce
[1] => finkle
[2] => c@b.c
)
)
我想删除那些有重复电子邮件的邮件。所以在上面的例子中,我只想删除或。我不担心检查名称或类似的东西,我只需要根据单个值对子阵列进行重复数据消除。
目前我有类似这样的东西
if(is_array($array) && count($array)>0){
foreach ($array as $subarray) {
$duplicateEmail[$subarray[2]] = isset($duplicateEmail[$subarray[2]]);
unset($duplicateEmail[$subarray[2]]);
}
}
但这是不对的。感谢您的帮助。
发布于 2009-12-08 02:23:46
一种利用数组索引唯一性的快速解决方案:
$newArr = array();
foreach ($array as $val) {
$newArr[$val[2]] = $val;
}
$array = array_values($newArr);
注意1:从上面可以看到,使用电子邮件地址的最后一个匹配项而不是第一个匹配项。这可以通过将第二行替换为
foreach (array_reverse($array) as $val) {
注意2:结果数组中的索引有些混乱。但我想这无关紧要。
发布于 2013-02-22 12:06:21
简单得多的解决方案。
$unique = array_map('unserialize', array_unique(array_map('serialize', $array)));
echo "<pre>";
print_r($unique);
发布于 2009-12-08 02:15:15
$array = array(
array('dave','jones','c@b.c'),
array('dave','jones','a@c.d'),
array('dave','jones','c@b.c'),
array('dave','jones','e@v.d'),
array('dave','jones','a@c.d')
);
$copy = $array; // create copy to delete dups from
$usedEmails = array(); // used emails
for( $i=0; $i<count($array); $i++ ) {
if ( in_array( $array[$i][2], $usedEmails ) ) {
unset($copy[$i]);
}
else {
$usedEmails[] = $array[$i][2];
}
}
print_r($copy);
https://stackoverflow.com/questions/1861682
复制相似问题