2017-10-06 20 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番目の要素と同じですので、重複した値から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はまだ重複データが含まれています。私は別のアプリケーションでこの同じコードを使用しており、そこで動作しているようです。今何してるの?

2番目の質問?

各インデックスのサブアレイは完全に構造が異なりますが、同じ値を含む可能性のある共通のインデックス "user_id"を持つとします。同じuser_id値を持つ要素から1つの要素のみを取得するにはどうすればよいですか?

セイ例えば、

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 
    ) 

) 

がどのように私は次のような構造を持つことになり、配列を持つことができますか?それはどのような方法をインデックス化する必要がある場合

$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; 
    } 
    */ 
} 

:配列ではなく、インデックス付きの連想配列を使用して作成するときに

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

* "2番目の質問?" * - それはあなたの質問を広すぎました。一度に1つの質問をしてください、それはスタック上で動作する方法です。 –

+0

[もっと速い回答を得るために、どのような状況で私の質問に「緊急」や他の類似のフレーズを追加することができますか?](// meta.stackoverflow.com/q/326569) - 要約は、これはボランティアに対処する理想的な方法であり、おそらく回答を得ることは非生産的です。これはあなたの質問に追加することを控えてください(特にあなたが経験豊富なユーザーであり、これを知っていることが期待されるため)。 – halfer

答えて

1

は単に

foreach() {...} 

$near_by_final = array_values($near_by_final); 
+0

あなたの答えでは、array_mapをまったく使用する必要はありません。たとえば: - 'foreach($ near_by as $ a){$ 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){$ a ['user_id']] = $ a;}'は同じことを行います。 – Saswat

関連する問題