在php中我有一个名为$source
的数组,其中包含
array(5) {
[0] => array(2) {
['id'] => string(18)'619025087225999360'
['url'] => 'http//example.com/apple'
}
[1] => array(2) {
['id'] => string(18)'623368621227847680'
['url'] => 'http//example.com/orange'
}
[2] => array(2) {
['id'] => string(18)'623368621227847680'
['url'] => 'http//example.com/blackberry'
}
}
所以在上面的数组中你可以看到索引号'1'和& '2'具有相同的'id'。这可能是一个巨大的阵列,重复的'id'出现了几次。
我想做的是,如果有相同的id,我只想拿起第一个'id'并丢弃另一个。我尝试使用array_unique()解决这个问题,但无法正确应用它。有人可以帮帮我吗?
答案 0 :(得分:3)
您好,您可以使用以下解决方案删除重复项。
$foo = [];
foreach ($arr as $key => $value) {
if (is_array($foo['id']) && !in_array($value['id'], $foo['id'])) {
$foo['id'][] = $value['id'];
$foo['url'][] = $value['url'];
}
}
最终$foo
将为您提供所需的数组
答案 1 :(得分:1)
制作新阵列并复制旧的唯一元素
$source_new = array();
foreach($source as $v) if (!isset($source_new[$v['id']])) $source_new[$v['id']] = $v;
$source = array_values($source_new);
答案 2 :(得分:1)
如果您可以控制生成此数组的代码,则可能需要将id用作数组键:
// input values in loop:
$id = '619025087225999360';
$url = 'http//example.com/apple'
if (!array_key_exists($id, $array)) {
$array[$id] = array(
'id' => $id,
'url' => $url,
);
}
这也可以防止重复循环遍历所有项目。特别是如果阵列很大,它会更快,更有效。
如果无法做到这一点,我建议使用此代码有效删除重复项:
$usedIds = array();
foreach ($array as $key => $value) {
if (array_key_exists($value['id'], $usedIds)) {
unset($array[$key]);
}
$usedIds[$value['id']] = true;
}
答案 3 :(得分:0)
更清洁,更简单:
从各种重叠查询中删除重复结果。
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
答案 4 :(得分:0)
嘿,我已经为你创建了一个代码。它非常简单,没有额外的方法,它完成了工作。
<?php
$source = array(
array(
'id' => '619025087225999360',
'url' => 'http//example.com/apple'
),
array(
'id' => '623368621227847680',
'url' => 'http//example.com/orange'
),
array(
'id' => '623368621227847680',
'url' => 'http//example.com/blackberry'
)
);
$newArray = array();
foreach($source as $data){
$flag = TRUE;
foreach($newArray as $newData){
if($newData['id']==$data['id']){
$flag = FALSE;
}
}
if($flag){
$newArray []= $data;
}
}
echo '<pre>';
echo '<h1>Previous Array</h1><hr>';
print_r($source);
echo '<h1>New Array</h1><hr>';
print_r($newArray);
?>