我有一个带有一些重复项的关联数组。例如,我有:
<?
$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);
但它似乎不起作用。如何删除数组中的重复项?
任何帮助都会很棒!
答案 0 :(得分:3)
另一种方法是找到唯一的user_id
,重要的是它们的数组键,然后只保留每列的相应值。
$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 :(得分:1)
一些事情:
array_unique函数不会递归到子数组
阅读手册:http://php.net/manual/en/function.array-unique.php “当且仅当(字符串)$ elem1 ===(字符串)$ elem2时,两个元素被认为是相等的。在单词中:当字符串表示相同时。将使用第一个元素。”
在你的情况下,$ elem1和$ elem2都是数组
答案 2 :(得分: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
)
)
答案 3 :(得分: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
)
)