0

私の問題は、オブジェクトの 2D 配列から一部のユーザーのメールを取得していますが、重複を取得したり、取得したりしないことです。それぞれにメールを送信する必要がありますが、1 通を超えてはなりません。

メールをエコーする現在のコード:

for ($row = 0; $row < count($results); $row++){
    for($col = 0; $col < count($results[$row]); $col++){
         foreach($results[$row][$col]->result() as $user){
               echo "<p>".$user->email."</p>";
         }
    }
}

それが役立つ場合は、CodeIgniter フレームワークを使用しています。array_diff() 関数と array_unique() を調べましたが、array_unique() は 2 次元配列を取らないか、少なくともドキュメントにはそのように設計されていないと書かれています。助言がありますか?

各 $results[$row] はそれ自体が一意ですが、問題は、ある $row が別の $row と同じ電子メール アドレスを持つ可能性があることであり、私はそれを望んでいません。前もって感謝します!

4

3 に答える 3

0

考えられる解決策は、(比較するメールアドレスしかない場合)、 (そのメールアドレスを持つ配列のキー)key表し、それ自体である一次元配列を作成することです。original keyvalueemail address

array_unique()次に、この1 次元配列に適用し、その後、配列の統合後に残ったキーのみを使用して、この配列を解析して必要な構造の多次元配列に戻します。

于 2012-08-09T19:52:01.607 に答える
0

データベースから電子メールのリストを取得している場合は、次のdistinctようにクエリに追加します。

$query = "SELECT DISTINCT email FROM emailTable"; //Add other fields to select as needed

// Add this piece to order them. Not sure if you'd need it or not
$query .= " ORDER BY email ASC";

$result = query_db($query);

次に、それぞれが配列$row内で一意であることがわかります$result

于 2012-08-09T20:00:53.710 に答える
0

これを試してみましょう:

$existing_emails = array();
for ($row = 0; $row < count($results); $row++){
    for($col = 0; $col < count($results[$row]); $col++){
        foreach($results[$row][$col]->result() as $user){
            if( ! isset( $existing_emails[ $user->email ] ) ) {
                $existing_emails[ $user->email ] = 1;
                echo "<p>".$user->email."</p>";
            }
        }
    }
}

これまでに処理した電子メールを記憶するために連想配列を保持し、再度何も送信しないようにします。

于 2012-08-09T20:01:26.597 に答える