如何删除具有相同值的数组元素?

时间:2017-10-06 07:03:41

标签: php arrays

我有一个数组$ near_by。结构是这样的: -

Array
(
    [0] => Array
        (
            [user_id] => 10
            [fname] => Test
            [lname] => 
            [image] => http://link//2.jpg
            [category_id] => 2
            [category_name_en] => Clinic
            [category_name_ar] => 
            [institute_rank] => 1
            [institute_rating] => 4.00
            [institute_review] => 1
            [total_institute] => 8
            [latitude] => 44.000984
            [longitude] => 106.76654
        )

    [1] => Array
        (
            [user_id] => 10
            [fname] => Test
            [lname] => 
            [image] => http://link//2.jpg
            [category_id] => 2
            [category_name_en] => Clinic
            [category_name_ar] => 
            [institute_rank] => 1
            [institute_rating] => 4.00
            [institute_review] => 1
            [total_institute] => 8
            [latitude] => 44.000984
            [longitude] => 106.76654
        )

)

第一个问题: -

我想删除重复的元素。像第0个元素和第1个元素一样,所以我想要一个新的数组,其中只有一个来自重复的值。

所以我写了这段代码: -

$near_by_arr = array_map("unserialize", array_unique(array_map("serialize", $near_by),SORT_REGULAR));
$near_by_final = array();
foreach($near_by_arr as $a)
{
    $near_by_final[] = $a;
}

但是,新数组$ near_by_final仍包含重复数据。我在另一个应用程序中使用了相同的代码,它似乎在那里工作。我现在做错了什么?

第二个问题?

假设每个索引中的子数组在结构上完全不同,但是有一个共同的索引" user_id"它可能包含相同的值。如何从具有相同user_id值的元素中仅检索一个元素?

比如说,

Array
(
 [0] => Array
    (
        [user_id] => 10
        [fname_en] => Test
        [lname_en] => 
        [image] => http://link//2.jpg
        [category_id] => 2
        [category_name_en] => Clinic
        [category_name_ar] => 
        [latitude] => 44.000984
        [longitude] => 106.76654
    )

 [1] => Array
    (
        [user_id] => 10
        [fname] => Test
        [lname] => 
        [image] => http://link//2.jpg
        [category_id] => 2
        [category_name_en] => Clinic
        [category_name_ar] => 
        [institute_rank] => 1
        [institute_rating] => 4.00
        [institute_review] => 1
        [total_institute] => 8
        [latitude] => 44.000984
        [longitude] => 106.76654
    )

 )

我如何拥有一个具有以下结构的数组?

 Array
 (
  [0] => Array
    (
        [user_id] => 10
        [fname_en] => Test
        [lname_en] => 
        [image] => http://link//2.jpg
        [category_id] => 2
        [category_name_en] => Clinic
        [category_name_ar] => 
        [latitude] => 44.000984
        [longitude] => 106.76654
    )
  )

2 个答案:

答案 0 :(得分:1)

只需在创建数组时使用关联数组而不是索引:

$near_by_arr = array_map("unserialize", array_unique(array_map("serialize", $near_by),SORT_REGULAR));
$near_by_final = array();

foreach($near_by_arr as $a) {
    $near_by_final[$a['user_id']] = $a;

   /*
   OR to keep only first entry:

   if (!isset($near_by_final[$a['user_id']])) {
       $near_by_final[$a['user_id']] = $a;
   }
   */
}

如果需要以任何方式编入索引:

foreach () {...}

$near_by_final = array_values($near_by_final);

答案 1 :(得分:0)

您的代码几乎是正确的,只需使用user_id作为索引而不是使用anto递增索引。

eq:

  $near_by_arr = array_map("unserialize", array_unique(array_map("serialize", $near_by), SORT_REGULAR));
  $near_by_final = array();
  foreach ($near_by_arr as $a) {
       $near_by_final[$a['user_id']] = $a;
  }