удалить дублированные значения массива в функции PHP - PullRequest
0 голосов
/ 23 марта 2012

Я читаю все темы, связанные с этим вопросом, в stackoverflow и во всем Интернете и не могу найти рабочее решение ... У каждого владельца есть свой товар, и когда кто-то покупает его, владелец получает электронное письмо с подтверждением, но когда в корзине мало одного и того же владельцаэлементы, он получает несколько одинаковых писем электронной почты, поэтому мне нужно удалить дублированные записи массива.Я пытался использовать функции DISTINCT и array_uniques, но не повезло.Любые советы?

У меня есть массив и функция для отправки почты ..

function email($mail_array) {
  foreach(array_unique($mail_array) as $field => $value) {
    $result = mysql_query("select email from users where $field='$value'");
    $row = mysql_fetch_array($result);


       $maail = mysql_real_escape_string($row['email']);
}
        $email_to = "".$maail."";



    // rest of mail formatting code

    // create email headers
    $headers = 'From: '.$email_from."\r\n" .
               'Reply-To: '.$email_from."\r\n" .
               'X-Mailer: PHP/' . phpversion();
    @mail($email_to, $email_subject, $email_message, $headers);
}


for ($i = 0; $i < $max; $i++) {
  $pid = $_SESSION['cart'][$i]['productid'];
  $owner = get_owner($pid);
  $mail_array = array(
    'name' => $owner
  );
  email($mail_array)  //call function to send mail          
}

Ответы [ 4 ]

1 голос
/ 23 марта 2012

Вам нужно переместить свою почтовую функцию за пределы цикла:

$mail_array = array();
for($i=0;$i<$max;$i++){
    $pid=$_SESSION['cart'][$i]['productid'];
    $owner=get_owner($pid);
?>
<?
    $mail_array[] = $owner;
}
email($mail_array)  //call function to send mail

... вам придется соответственно изменить почтовую функцию, поскольку вы не передаете ключ name таким образом,Или добавьте ключ name обратно в массив и измените обработку массива в функции mail, чтобы обрабатывать массив массивов.

1 голос
/ 23 марта 2012

Вы передаете $ mail_array с одним значением в функцию mail, поэтому отправляется несколько писем. Вместо этого сделайте $ owner как array () и вставьте в него имя всех владельцев. Но перед этим проверьте, есть ли у массива тот же владелец, уже использующий in_array () . Если владелец не находится в массиве, то нажмите его в массиве, в противном случае выполните следующую итерацию. И передать этот массив в почтовую функцию.

    $mail_array = array();
    for ($i = 0; $i < $max; $i++) {
    $pid = $_SESSION['cart'][$i]['productid'];
    $owner = get_owner($pid);
    $mail_array = array_push($mail_array,$owner);    
    }
    email($mail_array)  //call function to send mail   
0 голосов
/ 23 марта 2012

Поскольку вы когда-либо используете только поле name, имеет смысл статически закодировать это в запрос и просто передать индексированный массив имен. array_unique будет работать правильно.

* 1005 Е.Г. *

function email($mail_array) {
  foreach(array_unique($mail_array) as $name) {
    $result = mysql_query("SELECT email FROM users WHERE name = '".mysql_real_escape_escape_string($name)."'");
    // ...
  }
}

$mail_array = array();
for ($i = 0; $i < $max; $i++) {
  $pid = $_SESSION['cart'][$i]['productid'];
  $owner = get_owner($pid);
  $mail_array[] = $owner;
  email($mail_array)  //call function to send mail          
}
0 голосов
/ 23 марта 2012

Создайте пустой массив, в котором вы будете хранить адреса электронной почты, на которые вы уже отправили сообщение:

$arrSent = array();

Перед отправкой электронного письма проверьте, существует ли оно в вашем массиве:

if (!in_array($email_to, $arrSent))
{
    //send the email
}

Затем при отправке письма добавьте адрес в этот массив:

@mail($email_to, $email_subject, $email_message, $headers);
$arrSent[] = $email_to;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...