数组格式转换
<?php /*** * 数组归类转换 * 把$arr转成$brr的格式 * 规定一次循环必须借助于内置函数 **/ $arr = [ ['name' => 'jack', 'hobby' => '西瓜'], ['name' => 'jack', 'hobby' => '冬瓜'], ['name' => 'rose', 'hobby' => '木瓜'], ['name' => 'rose', 'hobby' => '甜瓜'], ['name' => 'jack', 'hobby' => '地瓜'], ['name' => 'rose', 'hobby' => '香瓜'] ]; $brr = [ ['name' => 'jack', 'hobby' => ['西瓜', '冬瓜', '地瓜']], ['name' => 'jack', 'hobby' => ['木瓜', '甜瓜', '香瓜']] ]; $arr2 = []; foreach ($arr as $k => $v) { $col = array_column($arr2, 'name');//获取所有指定键名的键值 if (!in_array($v['name'], $col)) { $arr2[] = ['name' => $v['name']]; } $col = array_column($arr2, 'name');//再次获取所有指定键名的键值 $col_key = array_search($v['name'], $col);//按照键值查找索引 $arr2[$col_key]['hobby'][] = $v['hobby'];//存入数组 } echo '<pre/>'; var_dump($arr2);
python实现
arr1 = [ {'name': 'jack', 'hobby': '西瓜'}, {'name': 'jack', 'hobby': '冬瓜'}, {'name': 'rose', 'hobby': '木瓜'}, {'name': 'rose', 'hobby': '甜瓜'}, {'name': 'jack', 'hobby': '地瓜'}, {'name': 'rose', 'hobby': '香瓜'} ] arr5 = [ {'name': 'jack', 'hobby': ['西瓜', '冬瓜', '地瓜']}, {'name': 'rose', 'hobby': ['木瓜', '甜瓜', '香瓜']} ] ''' 数组格式转换 把arr1转成arr5 ''' #匿名函数指定二维数组内容转换 tosingle=lambda arr:[ i.get('name') for i in arr] arr2 = []#目标数组 for x in arr1: name_list=tosingle(arr2) #获取姓名列表 if x.get('name') not in name_list:#名字如果不在列表中,就放进去 arr2.append({'name':x.get('name'),'hobby':[]}) name_list2 = tosingle(arr2) # 获取姓名列表 index = name_list2.index(x.get('name')) # 获取姓名在目标键值中的索引 arr2[index]['hobby'].append(x.get('hobby')) # 存入对应hobby print(arr2)