2011-08-29 96 views
2

我想删除以下数组的重复项。我想按第一个值分组,然后重建索引。php唯一/组关联数组

Array 
(
    [0] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

    [1] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

    [2] => Array 
     (
      [title] => New Mexico 
      [state_id] => 2 
     ) 

    [3] => Array 
     (
      [title] => Washington 
      [state_id] => 3 
     ) 

    [4] => Array 
     (
      [title] => Montana 
      [state_id] => 4 
     ) 

    [5] => Array 
     (
      [title] => Montana 
      [state_id] => 4 
     ) 
) 

Array 
(
    [0] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

[2] => Array 
    (
     [title] => New Mexico 
     [state_id] => 2 
    ) 

[3] => Array 
    (
     [title] => Washington 
     [state_id] => 3 
    ) 

[4] => Array 
    (
     [title] => Montana 
     [state_id] => 4 
    ) 

) 

,重建关键

Array 
(
    [0] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

    [1] => Array 
     (
      [title] => New Mexico 
      [state_id] => 2 
     ) 

    [2] => Array 
     (
      [title] => Washington 
      [state_id] => 3 
     ) 

    [3] => Array 
     (
      [title] => Montana 
      [state_id] => 4 
     ) 

) 
+2

'array_unique':http://php.net/manual/en/function.array-unique.php –

+0

@bat是的,它会 – arnaud576875

+0

@Joseph我必须采取我早先的评论回来。 '当且仅当(string)$ elem1 ===(string)$ elem2时,两个元素被认为是相等的。用词:当字符串表示法是相同的。* *所有*数组都等于'array_unique'。 – deceze

回答

6
$array = array_values(array_combine(array_map(function ($i) { return $i['title']; }, $array), $array)); 

  • 提取物title键(array_map
  • 使用提取的标题作为键为新阵列和与旧的(array_combine),其脱复制阵列(键必须是唯一的)结合它
  • 贯穿array_values的结果,其中丢弃键

分拆下来:

$keys = array_map(function ($i) { return $i['title']; }, $array); 
$deduped = array_combine($keys, $array); 
$result = array_values($deduped); 

对于PHP 5.2-你需要像这样写的匿名回调函数:

array_map(create_function('$i', 'return $i["title"];'), $array) 
+1

不错!你是不是指'return $ i ['title'];'(不是'echo $ i ['title'];')? ;) – arnaud576875

+0

我工作过。 – deceze

+0

array_unique()不适用于多维数组。我在第二个解决方案中遇到这个错误 解析错误:语法错误,意外的T_FUNCTION,期待')' – madphp

1
  1. 排序您的阵列由标题(usort的伎俩)
  2. 创建一个新的空数组
  3. 循环原阵列和存储你的新的空数组
  4. 如果发现旁边的数值数组值等于最后再跳过它

在这最后你有你想要的数组。
还有另一种方法:

  1. 排序您的阵列由标题
  2. 周期原始数组
  3. 如果该数组值等于最后再取消它
  4. 排序与PHP排序功能重建键再次数组