PHP 这个数组怎么转换呀

2020-07-24 10:22:39 +08:00
 sunny2580839896

<?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,
			],
		],
	],
];

2422 次点击
所在节点    PHP
6 条回复
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
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
2020-07-25 08:47:20 +08:00
@godog #1 谢谢大佬,我先看下
sunny2580839896
2020-07-25 08:48:02 +08:00
@COKETSANG #2 上面是原始数组格式,下面是目标数组
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
2020-07-28 22:27:54 +08:00
@cbasil #5 好的,谢谢大佬的辛苦符出

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX