过滤二维数组

时间:2015-06-19 14:47:02

标签: php arrays

我有一个看起来有点像这样的数组

array(
    [0] => array(
        ['id'] => 29
        ['name'] => john
        )
    [1] => array(
        ['id'] => 30
        ['name'] => joe
        ) 
    [2] => array(
        ['id'] => 29
        ['name'] => jake
        ) 
)

这种情况持续了一段时间。

我在其他地方(here)和(here)发现了这个问题,但两者都没有效果。

使用第一个我得到以下数组

array(
    [0] => 29
    [1] => jake
)

使用te第二个,它只过滤掉完全相同的重复项,而不是重复jus相同的id

我希望从阵列中移除相同id的所有重复项,我该怎么做?

3 个答案:

答案 0 :(得分:5)

简单使用PHP> = 5.5.0:

$result = array_column($array, null, 'id');

任选地:

$result = array_values(array_column($array, null, 'id'));

答案 1 :(得分:4)

$filteredUsers = [];
foreach ($users as $user) {
    $filteredUsers[$user['id']] = $user;
}

// optionally:
// $filteredUsers = array_values($filteredUsers);

答案 2 :(得分:2)

如果你想删除副本并单独留下一个:

IF EXISTS(SELECT * FROM tempdb.sys.tables WHERE [name] = '#tasks') BEGIN
   DROP TABLE #tasks;
END;

--save to temp table
SELECT TaskId, TaskDescription, TaskType into #tasks FROM Tasks

--select from temp table
SELECT TaskId, TaskDescription, TaskType FROM #tasks

--select from second table using temp table
SELECT AttachmentId, TaskId, [FileName], FileLocation 
FROM TaskAttachments where TaskID in(select TaskId from #tasks where TaskType = 1)

Demo

否则:

$array = array(
    array(
        'id' => 29,
        'name' => 'john'
    ),
    array(
        'id' => 30,
        'name' => 'joe'
    ),
    array(
        'id' => 29,
        'name' => 'jake'
    ) 
);

$filter = [];
$array = array_filter($array, function($a) use (&$filter) {
    $ret = !isset($filter[$a['id']]);
    $filter[$a['id']] = true;

    return $ret;
});

这将打印:

$duplicate = array_count_values(array_map(function($i) {
   return $i['id'];
}, $array));

$array = array_filter($array, function($a) use ($duplicate) {
    return $duplicate[$a['id']] <= 1;
});

var_dump($array);