【问题标题】:How to group Loop by index in PHP如何在 PHP 中按索引对循环进行分组
【发布时间】:2021-01-30 03:22:13
【问题描述】:

我正在制作一个通知系统(当你到达时告诉我),我无法通过电子邮件进行分组。我需要将产品与特定电子邮件分组以设置电子邮件发送。我的问题是通过电子邮件分隔单独的输出

数组

   $resultado = array(
      array( 'email' => 'de@email.com' , 'ean' => '1278', 'desc' => 'PROD1' ),
      array( 'email' => 'de@email.com' , 'ean' => '2342', 'desc' => 'PROD2' ),
      array( 'email' => 'de@email.com' , 'ean' => '7567', 'desc' => 'PROD3' ),
      array( 'email' => 'ma@email.com' , 'ean' => '5555', 'desc' => 'PROD4' ),
      array( 'email' => 'ma@email.com' , 'ean' => '3335', 'desc' => 'PROD5' ),
 
   );

   $saida = array();
 
   foreach ($resultado as $res) {
 
      if( !isset( $saida[$res['email']] ) ) {
         $saida[$res['email']] = array();
      }
      array_push( $saida[$res['email']], $res['ean'], $res['desc'], $res['email']);

   }

输出

       echo"<pre>";
       print_r( $saida );
       echo"</pre>";   
    
Array

    (
        [de@email.com] => Array
            (
                [0] => 1278
                [1] => PROD1
                [2] => de@email.com
                [3] => 2342
                [4] => PROD2
                [5] => de@email.com
                [6] => 7567
                [7] => PROD3
                [8] => de@email.com
            )
    
        [ma@email.com] => Array
            (
                [0] => 5555
                [1] => PROD4
                [2] => ma@email.com
                [3] => 3335
                [4] => PROD5
                [5] => ma@email.com
            )
    
    )

我需要显示一个断行(仅当电子邮件不同时)

PROD1 - 1278 - de@email.com
PROD2 - 2342 - de@email.com
PROD3 - 7567 - de@email.com
___________________________________

PROD4 - 5555 - ma@email.com
PROD5 - 3335 - ma@email.com

并发送电子邮件

 $return = sendEmail( TO, SITE, '$mails_HERE' , HOST, '[' . SITE . '] ' . $subject, $content);

【问题讨论】:

    标签: php mysql arrays for-loop foreach


    【解决方案1】:

    你只需要对你的项目进行分组。

    $results = array(
        array( 'email' => 'de@email.com' , 'ean' => '1278', 'desc' => 'PROD1' ),
        array( 'email' => 'de@email.com' , 'ean' => '2342', 'desc' => 'PROD2' ),
        array( 'email' => 'de@email.com' , 'ean' => '7567', 'desc' => 'PROD3' ),
        array( 'email' => 'ma@email.com' , 'ean' => '5555', 'desc' => 'PROD4' ),
        array( 'email' => 'ma@email.com' , 'ean' => '3335', 'desc' => 'PROD5' )
    );
    
    $data = [];
    
    foreach ($results as $result) {
        $data[$result['email']][] = $result;
    }
    

    就是这样。

    【讨论】:

      【解决方案2】:

      这里你可以先过滤掉唯一的邮件,然后在数组中搜索对应的邮件数据。

      $resultado = array(
          array( 'email' => 'de@email.com' , 'ean' => '1278', 'desc' => 'PROD1' ),
          array( 'email' => 'de@email.com' , 'ean' => '2342', 'desc' => 'PROD2' ),
          array( 'email' => 'de@email.com' , 'ean' => '7567', 'desc' => 'PROD3' ),
          array( 'email' => 'ma@email.com' , 'ean' => '5555', 'desc' => 'PROD4' ),
          array( 'email' => 'ma@email.com' , 'ean' => '3335', 'desc' => 'PROD5' ),
      
       );
      
       
      $emails =  array_unique(array_column( $resultado, 'email' ));
      $grouped = [];
      
      //looking for each email's corresponding data and saving it in group array
      foreach ($emails as $key1 => $each ) {
          foreach ($resultado as $value) {
                  if( $value['email'] === $each ){
                      unset($value['email']);
                      $grouped[$each][] = $value;
                  }
          }
      }
      
      
      // printing the group data
      foreach ($grouped as $key => $each_member ) {
          foreach ($each_member as $value) {
              echo"<pre>";
              echo  $value['desc'] . ' ' . $value['ean'] . ' ' . $key;
              echo"</pre>"; 
          }
         echo '-------------------------';
      }
      

      【讨论】:

      • 这样,每一步都添加换行符,我只需要在邮件不同的时候添加换行符,如上例所示。 (我编辑了问题)
      • @denis,我已更新答案以放置换行符位置
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2013-01-30
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      相关资源
      最近更新 更多