V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunny2580839896
V2EX  ›  PHP

PHP 这个数组怎么转换呀

  •  
  •   sunny2580839896 · 2020-07-24 10:22:39 +08:00 · 2411 次点击
    这是一个创建于 1589 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    <?php
    
    $a=[
    	'0'=>[
    		'a'=>'1',
    		'b'=>'1',
    		'c'=>'1',
    	],
    	'1'=>[
    		'a'=>'1',
    		'b'=>'2',
    		'c'=>'2',
    	],
    	'2'=>[
    		'a'=>'3',
    		'b'=>'3',
    		'c'=>'3',
    	],
    ];
    
    #转化成下面的结构
    
    $res=[
    	'0'=>[
    		'a'=>'1',
    		'c'=>[
    			'0'=>[
    				'b'=>1,
    				'c'=>1,
    			],
    			'1'=>[
    				'b'=>2,
    				'c'=>2,
    			],
    		],
    	],
    	'1'=>[
    		'a'=>'3',
    		'c'=>[
    			'0'=>[
    				'b'=>3,
    				'c'=>3,
    			],
    		],
    	],
    ];
    
    
    6 条回复    2020-07-28 22:27:54 +08:00
    godog
        1
    godog  
       2020-07-24 11:19:26 +08:00
    $a=[
    '0'=>[
    'a'=>'1',
    'b'=>'1',
    'c'=>'1',
    ],
    '1'=>[
    'a'=>'1',
    'b'=>'2',
    'c'=>'2',
    ],
    '2'=>[
    'a'=>'3',
    'b'=>'3',
    'c'=>'3',
    ],
    ];

    $tmp = [];
    foreach($a as $record){
    $valA = $record['a'];
    $valB = $record['b'];
    $valC = $record['c'];

    //a 的值做 key
    $tmp[$valA][] = [
    'b' => $valB,
    'c' => $valC,
    ];
    }

    $res = [];
    foreach($tmp as $key=>$val){
    $a = $key;
    $c = [];

    foreach($val as $part) {
    $c[] = $part;
    }

    $res[] = [
    'a' => $a,
    'c' => $c,
    ];
    }
    COKETSANG
        2
    COKETSANG  
       2020-07-24 18:36:46 +08:00
    $a_values = array_unique(array_column($a, 'a'));
    $res = [];
    foreach ($a_values as $key => $value) {
    foreach ($a as $k => $v) {
    if ($v['a'] == $value) {
    if (!$res[$value]) {
    $res[$value] = ['a' => $value, 'c' => []];
    }

    $res[$value]['c'][] = ['b' => $v['b'], 'c' => $v['c']];
    }
    }
    }

    $res = array_values($res);

    下次我还是建议你描述性下你的需求,这是我根据你要的结果猜的
    sunny2580839896
        3
    sunny2580839896  
    OP
       2020-07-25 08:47:20 +08:00
    @godog #1 谢谢大佬,我先看下
    sunny2580839896
        4
    sunny2580839896  
    OP
       2020-07-25 08:48:02 +08:00
    @COKETSANG #2 上面是原始数组格式,下面是目标数组
    cbasil
        5
    cbasil  
       2020-07-28 15:28:41 +08:00
    $b = array_unique(array_column($a,'a'));
    $list = [];
    foreach($a as $val){
    foreach($b as $i=>$v){
    if($val['a'] == $v){
    unset($val['a']);
    if(!$list[$i]){
    $list[$i] = [
    'a' => $v,
    'c' => [$val]
    ];
    }else{
    $list[$i]['c'][] = $val;
    }
    }
    }
    }

    echo "<pre>";print_r($list);echo "<pre>";
    跟二楼差不多,都是这种方法
    sunny2580839896
        6
    sunny2580839896  
    OP
       2020-07-28 22:27:54 +08:00
    @cbasil #5 好的,谢谢大佬的辛苦符出
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5125 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:52 · PVG 11:52 · LAX 19:52 · JFK 22:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.