2013-05-28 5 views
0

ВопросКак удалить данные из массива?

В основном я хочу, чтобы отправить напоминание электронные письма людям, которые не приняли вызов еще. От вызовы таблица Я получаю письма, которые были оспорены, а затем от a_challenges таблица Я получаю письма (имена пользователей), которые приняли вызов.

Проблема

Я хочу, чтобы в основном удалить адреса электронной почты, которые находятся в a_challenges стола из массива наступающего из бросает вызов стола, как те люди, которые уже приняли вызов, так что я не хочу для отправки им напоминания. Любая помощь будет оценена.

Код

<?php 
    require_once('includes/dbConnector.php'); 
    $dbCon = new dbConnector();//define the DB connection 
    $query_challenges = "Select distinct * from challenges";//query to fetch records from challenges table like usernames who have been challenged 
    //echo $query_challenges; 
    $result_challenges = $dbCon->query($query_challenges);//execute query 


    //start while loop to fetch the records 
    while($row_tr = $dbCon->fetchArray($result_challenges)){ 
     $t_name = $row_tr['t_name']; 
     $c_emails = $row_tr['c_emails']; 
     echo "<br /><br />".$t_name."<br /><br />"; 

      $query_a_challenges = "Select * from a_challenges where t_name='".$t_name."'";//query to fetch records from a_challenges table like usernames who have accepted the challenge, etc 
      //echo $query_a_challenges; 
      $result_a_challenges = $dbCon->query($query_a_challenges);//execute query 
      while($row_a_challenges = $dbCon->fetchArray($result_a_challenges)){ 
       echo "Accepted==> ". $row_a_challenges['full_name']." -- "; 
       echo $row_a_challenges['username']."<br /><br />"; 
      }//end while a_challenges.. 

     //echo $c_emails."<br /><br />"; 
     $c_emails = explode(',', $c_emails); 
     for($i=0; $i<count($c_emails); $i++){ 
      echo $c_emails[$i]."<br />"; 
     }//end for 
    }//end while challenges.. 
?> 

Фактический выход

Team==> AGS Larger Lads 

Accepted==> Donald -- [email protected] 

Accepted==> David -- [email protected] 

Accepted==> Sean -- [email protected] 

Отправить по электронной почте ниже указанному адресу:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

Ожидаемый результат

Team==> AGS Larger Lads 

Accepted==> Donald -- [email protected] 

Accepted==> David -- [email protected] 

Accepted==> Sean -- [email protected] 

Отправить по электронной почте ниже указанному адресу:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
+4

В чем разница между ожидаемым и фактическим выходом? – bwoebi

+5

'SELECT ... FROM ... WHERE адрес NOT IN (SELECT адрес FROM команд)' ... или что-то в этом направлении. Пусть база данных это сделает! – deceze

+2

Вместо этого все в PHP вы можете сделать это и в своем запросе mysql. и я думаю, что это будет легко. – rahularyansharma

ответ

2

Я думаю, что проще всего было бы, чтобы не удалить адрес электронной почты из строки, прежде чем взорвать его в массив (btw ужасный способ хранения адресов электронной почты в базах данных)

В любом случае, я просто предположил, что $ row_teams ['username'] - это адрес электронной почты вот, я думаю, самый простой способ сделать это с вашим кодом:

while($row_tr = $dbCon->fetchArray($result_team_request)){ 
     $t_name = $row_tr['t_name']; 
     $c_emails = $row_tr['c_emails']; 
     echo "<br /><br />".$t_name."<br /><br />"; 


      $query_teams = "Select * from teams where t_name='".$t_name."'";//query to fetch records from teams table like usernames who have accepted the challenge, etc 
      //echo $query_teams; 
      $result_teams = $dbCon->query($query_teams);//execute query 
      while($row_teams = $dbCon->fetchArray($result_teams)){ 
       echo "Accepted==> ". $row_teams['full_name']." -- "; 
       echo $row_teams['username']."<br /><br />"; 

       //my new code line: 
      $c_emails = str_replace($row_teams['username'],'',$c_emails); 
      }//end while teams.. 
      $c_emails = explode(',', $c_emails); 

     //echo $c_emails."<br /><br />"; 

     for($i=0; $i<count($c_emails); $i++){ 
      echo $c_emails[$i]."<br />"; 
     }//end for 
    }//end while team_request.. 
3

Вы не хотите, чтобы решить эту проблему в PHP, вы хотите, чтобы ограничить эти результаты в запрос из базы данных. По сути, код должен быть следующим:

select request.*, team.* 
from teams team, team_request request 
where team.name=request.team_name 
and request.accepted = false 

Это, конечно, спекуляция, пока вы не сможете опубликовать полную схему.

1

Я полагаю, то username поле содержит E-Mail, чтобы вы могли просто

//start while loop to fetch the records 
//*** NEW LINE HERE *** 
$usedmails=array(); 
while($row_tr = $dbCon->fetchArray($result_team_request)){ 
    $t_name = $row_tr['t_name']; 
    $c_emails = $row_tr['c_emails']; 
    echo "<br /><br />".$t_name."<br /><br />"; 

     $query_teams = "Select * from teams where t_name='".$t_name."'";//query to fetch records from teams table like usernames who have accepted the challenge, etc 
     //echo $query_teams; 
     $result_teams = $dbCon->query($query_teams);//execute query 
     while($row_teams = $dbCon->fetchArray($result_teams)){ 
      echo "Accepted==> ". $row_teams['full_name']." -- "; 
      echo $row_teams['username']."<br /><br />"; 
      //*** NEW LINE HERE *** 
      $usedmails[]=$row_teams['username']; 
     }//end while teams.. 

    //echo $c_emails."<br /><br />"; 
    $c_emails = explode(',', $c_emails); 
    // *** NEW LINE HERE *** 
    $c_emails=array_diff($c_emails,$usedmails); 
    for($i=0; $i<count($c_emails); $i++){ 
     echo $c_emails[$i]."<br />"; 
    }//end for 
+0

Это работает для меня, но я получаю эту ошибку ». Примечание: Неопределенное смещение: 1 в /var/www/vhosts/disciplinexgames.com/httpdocs/dx_scores/emails.php в строке 31» – colourtheweb

+0

У меня эта проблема решена с помощью ** isset ** Большое спасибо! – colourtheweb

Смежные вопросы