php - 从数组中删除在指定键上具有重复值的元素

时间:2021-12-04 04:23:16

if i have an array like this :

如果我有这样的数组:

Array (
  [0]=>
  Array (
    ["id"]=> "1"
    ["desc"]=> "desc 1"
    ["type"]=> "T"
    ["date"]=> "17-JAN-12"
  )
  [1]=>
  Array (
    ["id"]=> "2"
    ["desc"]=> "desc 2"
    ["type"]=> "P"
    ["date"]=> "05-JAN-12"
  )
  [2]=>
  Array (
    ["id"]=> "1"
    ["desc"]=> "desc 3"
    ["type"]=> "P"
    ["date"]=> "15-JAN-12"
  )
  [3]=>
  Array (
    ["id"]=> "3"
    ["desc"]=> "desc 4"
    ["type"]=> "P"
    ["date"]=> "06-JAN-12"
  )
  [4]=>
  Array (
    ["id"]=> "2"
    ["desc"]=> "desc 5"
    ["type"]=> "T"
    ["date"]=> "06-JAN-12"
  )
 )

I want to remove from it the elements that has duplicate values on only the key "id" , and get :

我想从中删除仅在键“id”上具有重复值的元素,并获取:

Array (
  [0]=>
  Array (
    ["id"]=> "1"
    ["desc"]=> "desc 1"
    ["type"]=> "T"
    ["date"]=> "17-JAN-12"
  )
  [1]=>
  Array (
    ["id"]=> "2"
    ["desc"]=> "desc 2"
    ["type"]=> "P"
    ["date"]=> "05-JAN-12"
  )
  [2]=>
  Array (
    ["id"]=> "3"
    ["desc"]=> "desc 4"
    ["type"]=> "P"
    ["date"]=> "06-JAN-12"
  )
 )

Thanks.

2 个解决方案

#1


6  

$result = array();
foreach($array as $arr){
   if(!isset($result[$arr["id"]])){
      $result[$arr["id"]] = $arr;
   }
}

#2


2  

it seems, that id is your primary key. so loop through array and insert element to new array only if id doesn't still exists.

看来,id是你的主键。所以只有当id不存在时才循环遍历数组并将元素插入到新数组中。

$new_array = array();
foreach ($old_array as $entry) {
    if (empty($new_array[$entry['id']])) $new_array[$entry['id']] = $entry;
}
$new_array = array_values($new_array);

btw. the last line is only for re-order your keys in final array

顺便说一句。最后一行仅用于在最终数组中重新排序键

#1


6  

$result = array();
foreach($array as $arr){
   if(!isset($result[$arr["id"]])){
      $result[$arr["id"]] = $arr;
   }
}

#2


2  

it seems, that id is your primary key. so loop through array and insert element to new array only if id doesn't still exists.

看来,id是你的主键。所以只有当id不存在时才循环遍历数组并将元素插入到新数组中。

$new_array = array();
foreach ($old_array as $entry) {
    if (empty($new_array[$entry['id']])) $new_array[$entry['id']] = $entry;
}
$new_array = array_values($new_array);

btw. the last line is only for re-order your keys in final array

顺便说一句。最后一行仅用于在最终数组中重新排序键