0

配列ループからユーザーにメールを送信しようとしています。各電子メールは複数の配列要素で存在できますが、電子メールを除いて、残りの要素は異なります。

以下に、2つの新しい配列を作成しようとするこのコードがあります。1つは電子メールだけで、もう1つは「name」などの他の値を使用します。最後に必要なのは次のような配列です。

$array_final(
             [0]email=>'whatever@com'=> (name1, name 2),
             [1]email=>"second@.com"=>name3,name4
            );

これが私の配列とループです:

$array_emailedinfo_email = array();//will hold just email
$array_emailedinfo = array();//will hold email and other date; 

foreach($array_expiredmeetingscos as $mail) {

 if(isset($checkAgainst[$mail[1]])) {

    $array_emailedinfo_email[] = array(
                                             "email" => $checkAgainst[$mail[1]]
                                              );
    $array_emailedinfo[] = array( 
                                        "email" => $checkAgainst[$mail[1]], 
                                        "name" => $mail[2]
                                        );
        }
     }

foreachループ自体で最終的な配列を取得できる可能性があると思いますが、それを理解していません。私はarray_merge()などを試しましたが、運がありません、ところで。

何か案が?ありがとう。

4

2 に答える 2

1

2 つの配列を用意しましょう。

$emails = array(array('email' => 'foo@example.com'), array('email' => 'bar@example.com');
$emails_info = array(array('email' => 'foo@example.com', 'name' => 'Alice'), array('email' => 'bar@example.com', 'name' => 'Bob'));

ここで、ループして$emailsで適切な値を見つけたいとし$emails_infoます。

foreach ($emails as $email) {
  $info = array_filter($emails_info, function($item) use ($email) {
    return $item['email'] == $email['email'];
  });

  // because $emails_info[index]['email'] might not be unique, $info is array of such items
  print_r($info);
}

しかし、特定の電子メールで一方または両方の配列にインデックスを付ける方がはるかに簡単だと思います。

//variable from your question
$array_emailedinfo['foo@example.com'] = array(array('email' => 'foo@example.com', 'name' => 'Alice'));

編集

配列内の適切な項目を見つける関数:

function find_in_emails($emails_info, $email) {
    foreach ($emails_info as $email_info) {
        if ($email_info['email'] == $email)
            return $email_info;
    }
    //not found...
    return array();
}
//usage
//...loop...
$info = find_in_emails($emails_info, $email['email']);
//...endloop...
于 2013-01-24T20:02:23.090 に答える
0

これが私がそれを修正した方法です。新しいコードでは、 $emails は $$array_emailedinfo_email と同じであり、 $emails_info は元の質問の $array_emailedinfo とそれぞれ同じであることに注意してください。

$array_all_expired_info = array();
$i=0;
$temparray = array();
foreach ($emails as $email) {
if (is_array($email)) {
    $array_all_expired_info[$i] = $email;
    foreach($emails_info as $all_info) {
        if (in_array($email["email"],$all_info)) {
            $array_all_expired_info[$i][] = $all_info;
        }
}
}
$i++;

}//為に

最終的な配列は、私が必要としていたものに近いものです。最初の要素は単なる電子メールであり、残りはそれぞれの要素内の配列です。これで、すべての要素をループして電子メールを取得し、対応するデータ (電子メールごとに複数になる可能性があります) を取得して、単純に電子メールを送信できます。

これはすべて簡単ではありませんでした。しかし、その過程でphp配列についていくつかのことを学びました. それだけの価値があります。

ありがとう。

于 2013-01-28T19:47:42.327 に答える