首页 > 解决方案 > 循环并匹配重复项

问题描述

我正在尝试使用这样的电子邮件地址遍历数组:数组(

  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. hi@example, orderitem 1, orderitem, 2, orderitem 3, orderitem 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() 等。没有任何效果,但可能只是初学者的错误

标签: php

解决方案


$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";
    }
}

推荐阅读