微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在PHP中按索引对Loop进行分组

如何解决如何在PHP中按索引对Loop进行分组

我正在建立一个通知系统(让我知道您何时到达),并且无法通过电子邮件进行分组。我需要将产品与特定的电子邮件分组以设置电子邮件发送。我的问题是通过电子邮件分隔单独的输出

数组

   $resultado = array(
      array( 'email' => 'de@email.com','ean' => '1278','desc' => 'PROD1' ),array( 'email' => 'de@email.com','ean' => '2342','desc' => 'PROD2' ),'ean' => '7567','desc' => 'PROD3' ),array( 'email' => 'ma@email.com','ean' => '5555','desc' => 'PROD4' ),'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']);

   }

OUT

       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);

解决方法

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

$resultado = array(
    array( 'email' => 'de@email.com','ean' => '1278','desc' => 'PROD1' ),array( 'email' => 'de@email.com','ean' => '2342','desc' => 'PROD2' ),'ean' => '7567','desc' => 'PROD3' ),array( 'email' => 'ma@email.com','ean' => '5555','desc' => 'PROD4' ),'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 '-------------------------';
}
,

您只需要对项目进行分组。

$results = array(
    array( 'email' => 'de@email.com','desc' => 'PROD5' )
);

$data = [];

foreach ($results as $result) {
    $data[$result['email']][] = $result;
}

就是这样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。