2017-10-06 92 views
-3

我有一個數組$ 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

* 「需要緊急幫助」 * - 請刪除。 –

+0

*「第二個問題?」* - 這讓你的問題過於寬泛。一次提出一個問題,這就是它在Stack上的工作原理。 –

+0

請閱讀[在什麼情況下,我可以添加「緊急」或其他類似的短語到我的問題,以獲得更快的答案?](/ meta.stackoverflow.com/q/326569) - 總結是,這不是這是解決志願者問題的理想方式,可能會對獲得答案產生反作用。請不要將此添加到您的問題中(尤其是因爲您是一位有經驗的用戶,並且有望知道這一點)。 – halfer

回答

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); 
+0

但在你的回答中,我們根本不需要使用array_map。例如: - 'foreach($ near_by as $ a){$ near_by_final [$ a ['user_id']] = $ a;}'也會這樣做。即使我們使用'$ a ['user_id']'作爲數組索引,那麼每次循環遇到相同值的user_id時,該數組索引的值都會被覆蓋。 – Saswat

+1

@Saswat你需要'array_map',因爲它反序列化你的數組並對它進行排序。是的,它將被覆蓋(除非使用註釋代碼僅保留第一次出現)。但是,如果所有的值都是相同的,那麼使用數據的副本是沒有區別的 – Justinas

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; 
    } 
+0

但是在你的答案中,我們根本不需要使用array_map。例如: - 'foreach($ near_by as $ a){$ near_by_final [$ a ['user_id']] = $ a;}'也會這樣做。 – Saswat

相關問題