我有这个数组结构。ID 145 是一个请求,它与另一个表有两个关联关系 - 项目 ID 16 和 17。因此,一个请求可以有多个项目。现在我想改变这个结构并合并重复的信息。我的意思是,合并[0]和[n]。So funding_project_nameandrelation_id将成为新子数组的两个条目。[145] => Array( [0] => Array ( [firstname] => John [institution] => Harvard [funding_project_name] => Project 1 #add to array funding_project_name - [0] [relation_id] => 16 #add to array relation_id - [0] ) [1] => Array ( [firstname] => John //discard [institution] => Harvard //discard [funding_project_name] => Project 2 #add to array funding_project_name - [1] [relation_id] => 17 #add to array relation_id - [1] ) )我使用以下方法实现了此输出:$query->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC)知道如何获得预期的结构吗?已经尝试了一些嵌套的 foreach,但不确定如何对项目进行分组预期的:[145] => Array ( [firstname] => John [institution] => Harvard [projects] => Array( [0] => Array( [funding_project_name] => Project 1 [relation_id] => 16 ) [1] => Array( [funding_project_name] => Project 2 [relation_id] => 17 ) ) )
1 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
如果只有 2 个字段发生变化,那么您可以循环所有键并收集数据 - 稍后根据需要查找唯一性并转换为字符串:
$array = array_map(function ($arr) {
foreach(array_keys($arr[0]) as $k) {
$vals = array_column($arr, $k);
$e[$k] = count(array_unique($vals)) == 1 ? $vals[0] : $vals;
}
return $e;
}, $array);
现场示例:3v4l
如果您愿意 - 这是较旧的代码版本:
$array = array_map(function ($arr) {
$a = array('first' => $arr[0]['first'], 'last' => $arr[0]['last']);
foreach($arr as $e) {
$a['funding_project_name'][] = $e['funding_project_name'];
$a['relation_id'][] = $e['relation_id'];
}
return $a;}, $array);
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消
