Перебор и сопоставление дубликатов

#php

#php

Вопрос:

Я пытаюсь перебрать массив с адресами электронной почты следующим образом: array (

  1. hi@example.com , элемент заказа 1, элемент заказа 2
  2. goodbye@example.com , элемент заказа 5, элемент заказа 3
  3. hello@example.com , элемент заказа 3, элемент заказа 2
  4. hi@example.com , элемент заказа 3, элемент заказа 5 )

и если есть совпадение, получите все элементы заказа для адреса. Должен вернуть:

  1. привет @пример, элемент заказа 1, элемент заказа 2, элемент заказа 3, элемент заказа 5
  2. goodbye@example.com , элемент заказа 5, элемент заказа 3

и так далее.

         foreach ($orders as $key => $value) { 
        $email = $value->getEmail(); 

        $emailArr = [$email];
        var_dump($emailArr);

        if(isset($this->$email) == $emailArr) {

        

    //   if(isset($email) == $email) {
    //         // echo '<div>' . $email . '</div>';
            $orderItems = $value->getOrderItems();
            foreach($orderItems as $item) {
                echo '<div>string is match</div>';
                echo '<div>' . $item->getName() . '</div>';
            }
         } else {
            echo '<div>nothing to show</div>';
  

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

Я вроде как новичок в PHP, но искал в webb и опробовал in_array(), trim() и т. Д. Ничего не работает, но, вероятно, просто ошибка новичков

Комментарии:

1. Приведенный вами пример массива не является допустимым массивом в PHP. Пожалуйста, приведите пример фактического массива, чтобы мы могли видеть каждый отдельный элемент.

2. isset() возвращает true или false .

Ответ №1:

Определите $emailArr вне вашего цикла. Затем добавьте к нему каждый элемент.

 $emailArr = array(); // define here
foreach ($orders as $key => $value) { 
    $email = $value->getEmail();
    if(in_array($email, $emailArr)) {
          // skip or do something else
        echo "Matched";
    }
    else {
        array_push($emailArr, $email);
        // do other stuff
        echo "added new";
    }
}