2

私はそのように見える配列を持っています:

array(3) { ["fk_article_id"]=> string(1) "4" ["first_name"]=> string(6) "Ulrike" ["last_name"]=> string(10) "Grasberger" }

array(3) { ["fk_article_id"]=> string(1) "9" ["first_name"]=> string(5) "Frank" ["last_name"]=> string(9) "Neubacher" }

array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "D." ["last_name"]=> string(5) "Bauer" }

array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "S." ["last_name"]=> string(6) "Anders" }

array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "M." ["last_name"]=> string(6) "Tsokos" }

array(3) { ["fk_article_id"]=> string(3) "897" ["first_name"]=> string(8) "Reinhard" ["last_name"]=> string(8) "Scholzen" }

今私がしたいのは、重複する"fk_article_id"値を取り除き"896"、最初の値だけが残るようにすることです。

array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "D." ["last_name"]=> string(5) "Bauer" }

私は今ですが、 IDarray_unique()の値のみを使用するように関数に指示する可能性は見つかりませんでした。"fk_article_id"

これどうやってするの?

編集:

これは、次の3列のdbテーブルの出力です。

$authors_result = pg_query($query_authors) or trigger_error("An error occurred.<br/>" . mysql_error() . "<br />SQL-Statements: {$searchSQL}");

while ($row = pg_fetch_assoc($authors_result)) {
var_dump($row);
}
4

5 に答える 5

4

を使用する簡単な方法は次のarray_reduceようになります。

$unique = array_reduce($subject, function($final, $article){
    static $seen = array();
    if ( ! array_key_exists($article['fk_article_id'], $seen)) {
        $seen[$article['fk_article_id']] = NULL;
        $final[] = $article;
    }
    return $final;
});

実用的な例を試してください。


編集:集計された結果を操作したくないようです。他に2つの考えがあります。

PHPでのフィルタリング

$seen = array();
while ($row = pg_fetch_assoc($authors_result)) {
    // Skip this row if we have already seen its article id
    if (array_key_exists($row['fk_article_id'], $seen)) {
        continue;
    }
    // Note that we have seen this article
    $seen[$row['fk_article_id']] = NULL;
    // Do whatever with your row
    var_dump($row);
}

DBでのフィルタリング

ここでの考え方は、実行中のクエリを変更して、繰り返される記事IDが結果セットに表示されないようにすることです。これがどのように行われるかは、すでに使用しているクエリによって異なります。

于 2010-09-22T08:15:46.570 に答える
1
foreach($array as $key => $value){
    if(!in_array( $array[$key]['fk_article_id'], $usedValues)){
        $usedValues = $array[$key]['fk_article_id'];
        $cleanArray = $array[$key];
    }
}

これらの線に沿った何かがそれを行う必要があります、私はそのための既存の配列機能はないと思います

于 2010-09-22T08:07:36.643 に答える
1

1つの方法は、配列を反復処理して、新しい配列内の各fk_article_idの最初のインスタンスを独自にコピーすることです。

<?php

$your_unique_array = array();
foreach ($your_original_array as $v) {
  if (!isset($your_unique_array[$v['fk_article_id']) {
      $your_unique_array[$v['fk_article_id'] = $v;
  }
}
于 2010-09-22T08:09:18.917 に答える
1

**一意の連想配列を取得**このメソッドを使用すると、簡単に一意の連想配列/多次元配列を取得できます。

  array:6 [▼
     0 => array:1 [▼
       2 => "Airtel DTH"
           ]
      1 => array:1 [▼
      2 => "Airtel DTH"
           ]
      2 => array:1 [▼
      2 => "Airtel DTH"
           ]
      3 => array:1 [▼
      3 => "NeuSoft PVT LMT"
      ]
       4 => array:1 [▼
      3  => "NeuSoft PVT LMT"
       ]
      5 => array:1 [▼
       3 => "NeuSoft PVT LMT"
       ]
      ]


     function  assoc_Array_unique($array)
            {
                $result = array_map("unserialize", array_unique(array_map("serialize", $array)));

                foreach ($result as $key => $value)
                {
                    if ( is_array($value) )
                    {
                        $result[$key] = assoc_Array_unique($value);
                    }
                }
                return   $result;
            }
   $arr_Company=   assoc_Array_unique($arr_Company);  // get Unique Array 
                $arr_Company = array_values($arr_Company); Rearrange Index of Array.
于 2017-04-26T20:48:15.990 に答える
0

foreach-loopを使用して配列を反復処理し、重複する_idを持たないすべての配列を新しい配列に保存します。

$clean = array();
foreach ($arrays as $array) {
  if (!isset($clean[$array['fk_article_id']])
    $clean[$array['fk_article_id']] = $array;
}
于 2010-09-22T08:08:36.237 に答える