为了账号安全,请及时绑定邮箱和手机立即绑定

为某些属性创建多维数组

为某些属性创建多维数组

PHP
呼唤远方 2021-12-24 15:27:41
我有这个数组结构。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);


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号