2011-02-02 38 views
3

我有一个关联数组与一些重复的项目。例如,我有:数组与唯一关联数组 - 删除重复

<? 
$group_array = array('user_id'=>array(), 'user_first'=>array()); 

,其输出类似下面:

Array 
(
[user_id] => Array 
    (
     [0] => 594 
     [1] => 597 
     [2] => 594 
    ) 

[user_first] => Array 
    (
     [0] => John 
     [1] => James 
     [2] => John 
    ) 
) 

我想这个消毒整个数组,以便只有用户John将出现一次(基于USER_ID) 。

我已经试过如下:

<?php 
    $unique = array_unique($group_array); 
    print_r($unique); 

但它似乎没有工作。任何其他想法如何删除数组中的重复项?

任何帮助将是伟大的!

回答

3

另一种方法是找到独特的user_id s,重要的是它们的ar然后只保留每列的相应值。

$group_array = array(
    'user_id' => array(594, 597,  594, 598 ), 
    'user_first' => array('John', 'James', 'John', 'John'), 
); 

// Find unique user_ids 
$uniques = array_unique($group_array['user_id']); 

// Keep only the uniques 
foreach ($group_array as $column => $collection) { 
    $group_array[$column] = array_intersect_key($collection, $uniques); 
} 

print_r($group_array); 
1

几件事情:

的array_unique功能不递归到子阵列

阅读手册:http://php.net/manual/en/function.array-unique.php “两个单元被认为相同,当且仅当(字符串)$ elem1 ===(字符串)$ elem2。用词语表示:当字符串表示相同时,第一个元素将被使用。“

在你的情况$ elem1和$ elem2时都阵列

0

此脚本将删除在user_ID的重复和保持多个 firstnames如果他们的ID是不同的:

$group_array = Array(
    'user_id' => Array(
     594, 
     597, 
     594, 
     598, 
    ), 
    'user_first' => Array(
     'John', 
     'James', 
     'John', 
     'John', 
    ) 
); 

$dup = array(); 
for ($i=0; $i<count($group_array['user_id']); $i++) { 
    if (in_array($group_array['user_id'][$i], $dup)) { 
     unset($group_array['user_id'][$i]); 
     unset($group_array['user_first'][$i]); 
    } else { 
     $dup[] = $group_array['user_id'][$i]; 
    } 
} 
print_r($group_array); 

输出:

Array 
(
    [user_id] => Array 
     (
      [0] => 594 
      [1] => 597 
      [3] => 598 
     ) 

    [user_first] => Array 
     (
      [0] => John 
      [1] => James 
      [3] => John 
     ) 

) 
0

一种可能的解决方案是使用的array_combine(...)过滤副作用:

$array = [ 
    'user_id' => [ 
     0 => 594, 
     1 => 597, 
     2 => 594 
    ], 
    'user_first' => [ 
     0 => 'John', 
     1 => 'James', 
     2 => 'John' 
    ] 
]; 

$combinedArray = array_combine($array['user_id'], $array['user_first']); 

因此,我们得到在阵列

Array 
(
    [594] => John 
    [597] => James 
) 

要恢复到原来结构,我们简单地可以提取键和值:

$array = [ 
    'user_id' => array_keys($combinedArray), 
    'user_first' => array_values($combinedArray), 
]; 

结果:

Array 
(
    [user_id] => Array 
     (
      [0] => 594 
      [1] => 597 
     ) 

    [user_first] => Array 
     (
      [0] => John 
      [1] => James 
     ) 
)