具有重复值的Php循环逻辑

具有重复值的Php循环逻辑,php,arrays,loops,logic,Php,Arrays,Loops,Logic,我需要找出一个让我困惑的逻辑。 我有一个像这样的数组 array ( 0 => array ( 'invoice_id' => 'WUI_588' 'email' => 'abc@hotmail.com' ), 1 => array ( 'invoice_id' => 'WUI_588' 'email' => 'def@hotmail.com' ), 2 =

我需要找出一个让我困惑的逻辑。 我有一个像这样的数组

array (
    0 => array (
        'invoice_id' => 'WUI_588'
        'email' => 'abc@hotmail.com'
    ),
    1 => array (
        'invoice_id' => 'WUI_588'
        'email' => 'def@hotmail.com'
    ),
    2 => array (
        'invoice_id' => 'WUI_589'
        'email' => 'ninja@hotmail.com'
    ),
    3 => array (
        'invoice_id' => 'WUI_589'
        'email' => 'ghi@hotmail.com'
    ),
    4 => array (
        'invoice_id' => 'WUI_590'
        'email' => '123@hotmail.com'
    ),
    5 => array (
        'invoice_id' => 'WUI_590'
        'email' => '123@hotmail.com'
    ),
    6 => array (
        'invoice_id' => 'WUI_591'
        'email' => '456@hotmail.com'
    ),
    7 => array (
        'invoice_id' => 'WUI_591'
        'email' => '456@hotmail.com'
    ),
)
因此,如果我要在表布局中打印数组,我会得到如下结果:-

INDEX | INVOICE ID | EMAIL 
  0   |   WUI_588  | abc@hotmail.com
  1   |   WUI_588  | def@hotmail.com
  2   |   WUI_589  | ninja@hotmail.com
  3   |   WUI_589  | ghi@hotmail.com
INDEX | INVOICE ID | EMAIL 
  0   |   WUI_588  | abc@hotmail.com, def@hotmail.com
  1   |   WUI_589  | ninja@hotmail.com, ghi@hotmail.com
我想要的是这样的东西:-

INDEX | INVOICE ID | EMAIL 
  0   |   WUI_588  | abc@hotmail.com
  1   |   WUI_588  | def@hotmail.com
  2   |   WUI_589  | ninja@hotmail.com
  3   |   WUI_589  | ghi@hotmail.com
INDEX | INVOICE ID | EMAIL 
  0   |   WUI_588  | abc@hotmail.com, def@hotmail.com
  1   |   WUI_589  | ninja@hotmail.com, ghi@hotmail.com
……等等。 我的一个尝试是

foreach ($array as $key => $value) {
  $invoiceidbucket[] = $value['invoice_id'];
  if(in_array($value['invoice_id'], $invoiceidbucket)) {
    $value['merged_email'][] = $value['email'];

    //Clearing array
    $invoiceidbucket = array;
  }
}
这样做:

$a = [];//Your array;
$retArray = []; //Output Array
foreach ($a as $key => $val) {
    $retArray['invoice_id'][] =  $retArray['email'];
}
在循环结束时,您将所有的invoice_id作为键,并带有它们的电子邮件id数组

在此之后按您喜欢的方式打印:)

按如下方式执行:

$a = [];//Your array;
$retArray = []; //Output Array
foreach ($a as $key => $val) {
    $retArray['invoice_id'][] =  $retArray['email'];
}
在循环结束时,您将所有的invoice_id作为键,并带有它们的电子邮件id数组


在此之后按您喜欢的方式打印:)

在开始新行之前,通过发票ID列循环进行检查。如果找到了匹配项,请将电子邮件放在同一行中,再进行一次检查,检查前会添加一个逗号,以防它不是该行的第一个电子邮件ID


可能会显示您是如何处理的。

在开始新行之前,通过发票ID列循环进行检查。如果找到了匹配项,请将电子邮件放在同一行中,再进行一次检查,检查前会添加一个逗号,以防它不是该行的第一个电子邮件ID


可能会向我们展示您是如何接近它的。

使用以下代码创建所需的数组:-

$final_array = array();
foreach($initial_array as $arr){
  $final_array[$arr['invoice_id']]['invoice_id'] = $arr['invoice_id'];
  $final_array[$arr['invoice_id']]['email'] = (!empty($final_array[$arr['invoice_id']]['email']))?$final_array[$arr['invoice_id']]['email'].','.$arr['email'] : $arr['email'];
}
$final_array = array_values($final_array);
echo "<pre/>";print_r($final_array);
$final_array=array();
foreach($arr形式的初始_数组){
$final_数组[$arr['invoice_id']['invoice_id']=$arr['invoice_id'];
$final_数组[$arr['invoice_id']['email']=(!empty($final_数组[$arr['invoice_id']]['email'])?$final_数组[$arr['invoice_id']['email'].$arr['email']:$arr['email'];
}
$final\u数组=数组值($final\u数组);
回声“;打印(最终数组);
输出:-


注意:-现在在循环(
foreach()
)中使用此
$final_数组
),并以所需方式打印

使用以下代码创建所需数组:-

$final_array = array();
foreach($initial_array as $arr){
  $final_array[$arr['invoice_id']]['invoice_id'] = $arr['invoice_id'];
  $final_array[$arr['invoice_id']]['email'] = (!empty($final_array[$arr['invoice_id']]['email']))?$final_array[$arr['invoice_id']]['email'].','.$arr['email'] : $arr['email'];
}
$final_array = array_values($final_array);
echo "<pre/>";print_r($final_array);
$final_array=array();
foreach($arr形式的初始_数组){
$final_数组[$arr['invoice_id']['invoice_id']=$arr['invoice_id'];
$final_数组[$arr['invoice_id']['email']=(!empty($final_数组[$arr['invoice_id']]['email'])?$final_数组[$arr['invoice_id']['email'].$arr['email']:$arr['email'];
}
$final\u数组=数组值($final\u数组);
回声“;打印(最终数组);
输出:-


注意:-现在在循环(
foreach()
)中使用此
$final_数组
),并以所需的方式打印

我的方法不会进行不必要的迭代覆盖。我建议:

代码:()

输出:

array (
  0 => 
  array (
    'invoice_id' => 'WUI_588',
    'email' => 'abc@hotmail.com, def@hotmail.com',
  ),
  1 => 
  array (
    'invoice_id' => 'WUI_589',
    'email' => 'ninja@hotmail.com, ghi@hotmail.com',
  ),
  2 => 
  array (
    'invoice_id' => 'WUI_590',
    'email' => '123@hotmail.com, 123@hotmail.com',
  ),
  3 => 
  array (
    'invoice_id' => 'WUI_591',
    'email' => '456@hotmail.com, 456@hotmail.com',
  ),
)

我的方法不会进行不必要的迭代覆盖。我建议:

代码:()

输出:

array (
  0 => 
  array (
    'invoice_id' => 'WUI_588',
    'email' => 'abc@hotmail.com, def@hotmail.com',
  ),
  1 => 
  array (
    'invoice_id' => 'WUI_589',
    'email' => 'ninja@hotmail.com, ghi@hotmail.com',
  ),
  2 => 
  array (
    'invoice_id' => 'WUI_590',
    'email' => '123@hotmail.com, 123@hotmail.com',
  ),
  3 => 
  array (
    'invoice_id' => 'WUI_591',
    'email' => '456@hotmail.com, 456@hotmail.com',
  ),
)

向我们展示一些您尝试过的代码或您最先到达的代码one@Thamilan,我添加了一个不成功的解决方案。请看@Saty的答案。在回答你的问题之前,他们跟我打赌:)@Thamlan你是在用同样的逻辑吗???@Saty,不是。有些不同,但使用相同的内置方法向我们展示一些您尝试过的代码或最初获得的代码one@Thamilan,我添加了一个不成功的解决方案。请看@Saty的答案。在回答你的问题之前,他们跟我打赌:)@Thamlan你是在用同样的逻辑吗???@Saty,不是。有些不同,但使用相同的内置方法