如何在使用左连接时在重复行的情况下将一个字段的所有数据放入数组

How to have all data of one field into an array in case of duplicate row while using left join

我有一个这样的结果集关联数组

$result=array(
    array('name'=>'test1','age'=>23,'email'=>'Good'),
    array('name'=>'test2','age'=>24,'email'=>'Good'),
    array('name'=>'test2','age'=>24,'email'=>'Best')
);

我需要这样的结果

array(
  0 => 
    array(
      'name' => 'test1',
      'age' => 23,
      'emails' => 
        array (0 => 'Good')
    ),
  1 => 
    array (
      'name' => 'test2',
      'age' => 24,
      'emails' => 
        array (
          0 => 'Good',
          1 => 'Best'
        )
    )
)

应删除其他行,但应将一个字段数据保存在我在示例中描述的任何行中

你可以使用group_concat

select name, age,  group_concat(emails) as emails
from table
GROUP BY name, age 

然后当你循环查询结果时,你可以用逗号分解 $row['emails'] 并使你的数组​​:

$arr= array();
foreach ($result as $row) {
$your_internal_arr = explode(',', $row['emails']);
$arr[] = array('name'=> $row['name'], 'age'=> $row['age'], 'emails'=>$your_internal_arr);

}
print_r($arr);

我自己有一个解决方案

$total_size=sizeof($arr);
for($i=0;$i<$total_size;$i++){
    $arr[$i]['emails']=array();
    $arr[$i]['emails'][]=$arr[$i]['email'];
    $unset=0;
    foreach($arr[$i] as $key=>$value){
        if($key=='name' && $arr[$i]['name']==$arr[$i+1]['name']){
            $arr[$i]['emails'][]=$arr[$i+1]['email'];
            $unset=1;
        }
    }
    unset($arr[$i]['email']);
    if($unset==1){
        unset($arr[$i+1]);
        $i++;
    }
}