2010-12-01 17 views
3

私は多次元配列で作業しています。重複を値で削除するにはどうすればよいですか?次の配列では、[0]、[2]、[5]は同じ[ID]を持ちます。特定の値に基づいて重複配列を削除する関数はありますか?この場合、配列[2]と配列[5]は、配列[0]と同じ[ID]を持つため、削除したいと考えています。PHP:値でオブジェクトの配列をグループ化する関数

ありがとうございます。ありがとうございます。

 Array 
(
    [0] => stdClass Object 
     (
      [d] => 2010-10-18 03:30:04 
      [ID] => 9 
     ) 

    [1] => stdClass Object 
     (
      [d] => 2010-10-18 03:30:20 
      [ID] => 4 
     ) 

    [2] => stdClass Object 
     (
      [d] => 2010-11-03 16:46:34 
      [ID] => 9 
     ) 

    [3] => stdClass Object 
     (
      [d] => 2010-11-02 03:19:14 
      [ID] => 1 
     ) 

    [4] => stdClass Object 
     (
      [d] => 2010-05-12 04:57:34 
      [ID] => 2 
     )  

    [5] => stdClass Object 
     (
      [d] => 2010-05-10 05:24:15 
      [ID] => 9 
     ) 

) 
+0

実際には、用語「キー」を使用していますが、実際には「キー」ではなく「値」を参照しています。あなたが言及している[0]、[2]、[5]はキーです。 [ID]もキーです。これらのIDのそれぞれに含まれる9個はすべて値です。 –

+0

ありがとう、私は質問の言語を変更しました。 – superUntitled

答えて

5

一つの方法:($old_arrayはあなたの配列で、$new_arrayは新しいものが含まれます、削除dupes、そのIDをキー)

$new_array = array(); 
foreach ($old_array as $item) 
    if (!array_key_exists($item->ID, $new_array)) 
    $new_array[$item->ID] = $item; 

(私はこれをテストしていませんが、それが必要仕事)

0

私はループスルーして新しい配列を作成するのが最も簡単だと思います。ループの中で、array_key_exists()を使用してIDが新しい配列にすでに存在するかどうかを判断し、そうでない場合は要素を追加します。

0

多次元配列では、のの配列です。

$ids = array(); 

forach($array as $key=>$obj) { 
    if(isset($ids[$obj->ID])) {//did we already encounter an object with this ID? 
     unset($array[$key]); // if yes, delete this object 
    } 
    else { 
     $ids[$obj->ID] = 1; // if not, add ID to processed IDs 
    } 
} 

ます。また、新しい配列を作成し、新しい配列にオブジェクトを追加することができます:あなたはそれを超えるだけのループ(この例では、所定の位置に配列を変更する)ことができます。それを行うには

0
foreach ($array as $element) { 
    foreach ($array as &$element2) { 
     if ($element2->ID == $element->ID && $element2 != $element) { 
      unset($element2); 
     } 
    } 
} 

2番目のforeachのループ参照に注意してください。

0

チェックindexed関数を参照してください。

use function \nspl\op\propertyGetter; 
use function \nspl\a\indexed; 

$groupedById = indexed($objects, propertyGetter('id')); 
関連する問題