我有一个数组$ 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
)
)
答案 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;
}