如何删除多维数组中特定键的重复值?

问题描述:

我有以下多维数组:如何删除多维数组中特定键的重复值?

<?php 
$array = array(
array('first' => 1, 'second' => 1), 
array('first' => 1, 'second' => 1), 
array('first' => 2, 'second' => 1), 
array('first' => 3, 'second' => 1), 
array('first' => 3, 'second' => 1), 
array('first' => 3, 'second' => 1)); 

我怎样可以删除重复的first值?同时保留重复的second值。

处理数组应该是后:

array(
array('first' => 1, 'second' => 1), 
array('first' => 2, 'second' => 1), 
array('first' => 3, 'second' => 1)); 

参见:http://codepad.org/tMh28KMf

+0

你能给我们一个应该被删除的键和一些不应该的例子吗?当然预期的结果! – Florent

+0

我有点困惑你在输出中寻找什么。你需要'$ array = array(1,2,3,4,5,6);'或'$ array = array(array('first'=> 1),array('first'=> 2),数组('first'=> 3));'? – curtisdf

+0

对不起,我更新了我的回答 –

你必须做一些foreach循环和重新组装自己的数组。查看PHP的array_unique()

+0

我怎么能用这个作为我的例子? –

+0

对不起,我还是不太明白你需要什么。你是否也想在“秒”键中过滤出重复的内容?它也可能有助于了解此代码的用途。总体来说,可能有更好的方法来构建它。 – curtisdf

+0

好吧,我看到你不想在''first''之后从后面的键中删除重复项。但是......如果你有一些“第一”复制品,但是它们在随后的键“second”或“third”中有所不同? – curtisdf

代码:

$array = array(
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
    array('first' => 3, 'second' => 1) 
); 

$temp = array(); 
$new = array(); 

foreach($array as $value) 
{ 
    if(!in_array($value['first'],$temp)) 
    { 
     $temp[] = $value['first']; 
     $new[] = $value; 
    } 
} 

现在$new包含以下内容:

array(
    array('first' => 1, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
); 
+0

谢谢,但如何我如果还键“第二”和“第三” - 在第二和第三我没有删除重复 –

+0

根据您更新的问题更新了答案。 – Anne

这将删除重复的数组:

$array = array_map('unserialize', array_unique(array_map('serialize', $array)));

的关键仍然是相同的,所以你可能需要修复它们。

+0

我想只从键“第一”中删除值 - 在我的数组中可以另外键,例如“秒”和“第三” - 这些键不能删除重复 –

+0

这是一个非常“不雅”的方法。 – Leigh

什么,如果数组是这样

$array = array(
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 12), 
    array('first' => 2, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
    array('first' => 3, 'second' => 1) 
); 

$temp = array(); 
$new = array(); 

你想新的数组美元的新包含以下内容:

array(
    array('first' => 1, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
); 

array(
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 12), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
);