2013-01-24 3 views
0

배열 루프에서 사용자에게 전자 메일을 보내려고합니다. 각 전자 메일은 여러 배열 요소에있을 수 있지만 전자 메일 이외의 나머지 요소는 다릅니다.PHP는 값을 기반으로 배열을 병합합니다.

두 개의 새 배열을 채우려 고 시도하는이 코드는 아래에 있습니다. 하나는 전자 메일로, 다른 하나는 'name'등과 같은 다른 값으로 채 웁니다. 마지막으로 필요한 것은 배열입니다.

나는 내가 foreach 루프 자체의 최종 배열을 얻을 수 있다고 생각하지만를 파악하지 않은

$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] 
             ); 
     } 
    } 

: 여기

$array_final(
      [0]email=>'[email protected]'=> (name1, name 2), 
      [1]email=>"[email protected]"=>name3,name4 
      ); 

내 배열과 루프입니다. 나는 array_merge() 등을 시험해 보았지만 행운은 없다.

아이디어가 있으십니까? 감사.

+0

'$ array_final'을 더 나은 방법으로 설명해보십시오. 왜냐하면 실제로 무엇을 성취하려고하는지 명확하지 않기 때문입니다. –

+0

$ array_final은 배열 요소 당 한 번만 전자 메일 주소가 표시되지만 동일한 배열 요소는 여러 개의 '이름'을 가질 수 있습니다. 아이디어는 $ array_final을 통해 루프를 돌릴 수 있고 전자 메일을 가져온 다음 다양한 이름을 붙잡고 전자 메일로 보낼 수 있다는 것입니다. – IrfanClemson

+0

'$ array_final'과'$ array_emailedinfo'의 차이점은 무엇입니까? 질문을 수정하고 거기에 붙여 넣으십시오. 'print_r ($ array_final)'의 출력을 기대하고 있습니까? –

답변

1

의 두 배열을 보자 : $emails을 통해 지금

$emails = array(array('email' => '[email protected]'), array('email' => '[email protected]'); 
$emails_info = array(array('email' => '[email protected]', 'name' => 'Alice'), array('email' => '[email protected]', 'name' => 'Bob')); 

당신이 원하는에 루프를하고 $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['[email protected]'] = array(array('email' => '[email protected]', 'name' => 'Alice')); 

EDIT

기능 : 여기

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... 
+0

좋습니다! 시도 중 ... thx – IrfanClemson

+0

작동하지 않습니다. 코드를 사용하여 (나는 $ emails와 $ emails_info로 배열을 변경했다.) print_r은 한 묶음의 array()와 여러 개의 중복 이메일을 가진 실제 데이터를 제공한다. 코드를 함수에 넣어야합니까? – IrfanClemson

+0

죄송합니다. 코드를 테스트하지 않았으므로 이미 답변을 편집했습니다. 익명 함수에서 return $ item [ 'email'] == $ email [ 'email'];을주의하십시오. –

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 배열에 대해 몇 가지 배웠습니다. 그만한 가치가있어.

감사합니다.

관련 문제