数组重构

WBOY
Libérer: 2016-06-20 12:55:14
original
2195 Les gens l'ont consulté

Array(    [0] => Array        (            [title] => 111            [name] => 上海        )    [1] => Array        (            [title] => 111            [name] => 江苏        )    [2] => Array        (            [title] => dd            [name] => 上海        )    [3] => Array        (            [title] => dd            [name] => 江苏        )    [4] => Array        (            [title] => dd            [name] => 浙江        ))
Copier après la connexion


我想把 上面的 二位数组的格式 重构为 title名字一样的合并起来 例如
array(   [0]=>array(       [title]=111       [name]=上海,苏州),);
Copier après la connexion


回复讨论(解决方案)

$arr = array(			array('title'=>'111','name'=>'上海'),			array('title'=>'111','name'=>'杭州'),			array('title'=>'dd','name'=>'上海'),			array('title'=>'dd','name'=>'宁波'),			array('title'=>'dd','name'=>'无锡'),		);$title_arr = array();$data = array();foreach($arr as $value){	if(!in_array($value['title'],$title_arr)){		array_push($title_arr,$value['title']);		$data[] = $value;	}else{		$index = array_search($value['title'],$title_arr);		$data[$index]['name'] .= ','.$value['name'];	}}var_dump($data);
Copier après la connexion
Copier après la connexion

这是一个很普遍的需求,所以写一个通用函数
起了一个长长的名字,来提醒你们本可以在 MySQL 中就能完成的(group_concat)

function array_group_concat($ar, $field, $group_by) {  $res = array();  foreach($ar as $row) {    $g = $row[$group_by];    if(isset($res[$g])) $res[$g][$field] .= ',' . $row[$field];    else $res[$g] = $row;  }  return array_values($res);}
Copier après la connexion
Copier après la connexion

例:
按 title 分组取 name
$arr = array(            array('title'=>'111','name'=>'上海'),            array('title'=>'111','name'=>'杭州'),            array('title'=>'dd','name'=>'上海'),            array('title'=>'dd','name'=>'宁波'),            array('title'=>'dd','name'=>'无锡'),        );print_r(array_group_concat($arr, 'name', 'title'));
Copier après la connexion
Copier après la connexion
Array(    [0] => Array        (            [title] => 111            [name] => 上海,杭州        )    [1] => Array        (            [title] => dd            [name] => 上海,宁波,无锡        ))
Copier après la connexion
Copier après la connexion

按 name 分组取 title
$arr = array(            array('title'=>'111','name'=>'上海'),            array('title'=>'111','name'=>'杭州'),            array('title'=>'dd','name'=>'上海'),            array('title'=>'dd','name'=>'宁波'),            array('title'=>'dd','name'=>'无锡'),        );print_r(array_group_concat($arr, 'title', 'name'));
Copier après la connexion
Copier après la connexion
Array(    [0] => Array        (            [title] => 111,dd            [name] => 上海        )    [1] => Array        (            [title] => 111            [name] => 杭州        )    [2] => Array        (            [title] => dd            [name] => 宁波        )    [3] => Array        (            [title] => dd            [name] => 无锡        ))
Copier après la connexion
Copier après la connexion

<?php$arr = array(            array('title'=>'111','name'=>'上海'),            array('title'=>'111','name'=>'杭州'),            array('title'=>'dd','name'=>'上海'),            array('title'=>'dd','name'=>'宁波'),            array('title'=>'dd','name'=>'无锡'),        );$tmp = $arr[0]['title'];$newarr = array();foreach($arr as $value){	$key = $tmp == $value['title'] ? $tmp : $value['title'];	$newarr[$key]['title'] = $value['title'];	$newarr[$key]['name'] .= $value['name'].',';	}var_dump($newarr);
Copier après la connexion
Copier après la connexion

这个看不是很难,根据数组title来做判断。
重新定义一个接收数组。
循环原数组
原来数组title的值相同,把title赋值到新数组中name值做拼接;
不相同,title和name都赋值过去。
循环完后新数组就是你要的格式

这是一个很普遍的需求,所以写一个通用函数
起了一个长长的名字,来提醒你们本可以在 MySQL 中就能完成的(group_concat)

function array_group_concat($ar, $field, $group_by) {  $res = array();  foreach($ar as $row) {    $g = $row[$group_by];    if(isset($res[$g])) $res[$g][$field] .= ',' . $row[$field];    else $res[$g] = $row;  }  return array_values($res);}
Copier après la connexion
Copier après la connexion

例:
按 title 分组取 name
$arr = array(            array('title'=>'111','name'=>'上海'),            array('title'=>'111','name'=>'杭州'),            array('title'=>'dd','name'=>'上海'),            array('title'=>'dd','name'=>'宁波'),            array('title'=>'dd','name'=>'无锡'),        );print_r(array_group_concat($arr, 'name', 'title'));
Copier après la connexion
Copier après la connexion
Array(    [0] => Array        (            [title] => 111            [name] => 上海,杭州        )    [1] => Array        (            [title] => dd            [name] => 上海,宁波,无锡        ))
Copier après la connexion
Copier après la connexion

按 name 分组取 title
$arr = array(            array('title'=>'111','name'=>'上海'),            array('title'=>'111','name'=>'杭州'),            array('title'=>'dd','name'=>'上海'),            array('title'=>'dd','name'=>'宁波'),            array('title'=>'dd','name'=>'无锡'),        );print_r(array_group_concat($arr, 'title', 'name'));
Copier après la connexion
Copier après la connexion
Array(    [0] => Array        (            [title] => 111,dd            [name] => 上海        )    [1] => Array        (            [title] => 111            [name] => 杭州        )    [2] => Array        (            [title] => dd            [name] => 宁波        )    [3] => Array        (            [title] => dd            [name] => 无锡        ))
Copier après la connexion
Copier après la connexion



版主 你好, 我的这个结果 是通过 下面这条语句得到的 在mysql段 利用group_concat 该如何修改
$sql="select a.title,c.name from information_agent as a left join information_agent_area as b on a.id=b.tid left join sales_area as c  on b.area_id=c.id";
Copier après la connexion

select a.title, GROUP_CONCAT(c.name) AS name  from information_agent as a     left join information_agent_area as b on a.id=b.tid    left join sales_area as c  on b.area_id=c.id  GROUP BY a.title
Copier après la connexion
Copier après la connexion

指令串拆行看的清楚些,注意有大写的那些地方

select a.title, GROUP_CONCAT(c.name) AS name  from information_agent as a     left join information_agent_area as b on a.id=b.tid    left join sales_area as c  on b.area_id=c.id  GROUP BY a.title
Copier après la connexion
Copier après la connexion

指令串拆行看的清楚些,注意有大写的那些地方



嗯嗯 ,好的 谢谢指导, 可以实现了。

基本查询 mysql> select * from aa;+------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200  ||3 | 500  |+------+------+6 rows in set (0.00 sec)1.以id分组,把name字段的值打印在一行,逗号分隔(默认) mysql> select id,group_concat(name) from aa group by id;+------+--------------------+| id| group_concat(name) |+------+--------------------+|1 | 10,20,20||2 | 20 ||3 | 200,500|+------+--------------------+3 rows in set (0.00 sec)
Copier après la connexion

$arr = array(			array('title'=>'111','name'=>'上海'),			array('title'=>'111','name'=>'杭州'),			array('title'=>'dd','name'=>'上海'),			array('title'=>'dd','name'=>'宁波'),			array('title'=>'dd','name'=>'无锡'),		);$title_arr = array();$data = array();foreach($arr as $value){	if(!in_array($value['title'],$title_arr)){		array_push($title_arr,$value['title']);		$data[] = $value;	}else{		$index = array_search($value['title'],$title_arr);		$data[$index]['name'] .= ','.$value['name'];	}}var_dump($data);
Copier après la connexion
Copier après la connexion


谢谢

这个看不是很难,根据数组title来做判断。
重新定义一个接收数组。
循环原数组
原来数组title的值相同,把title赋值到新数组中name值做拼接;
不相同,title和name都赋值过去。
循环完后新数组就是你要的格式



嗯,好的 谢谢指导

<?php$arr = array(            array('title'=>'111','name'=>'上海'),            array('title'=>'111','name'=>'杭州'),            array('title'=>'dd','name'=>'上海'),            array('title'=>'dd','name'=>'宁波'),            array('title'=>'dd','name'=>'无锡'),        );$tmp = $arr[0]['title'];$newarr = array();foreach($arr as $value){	$key = $tmp == $value['title'] ? $tmp : $value['title'];	$newarr[$key]['title'] = $value['title'];	$newarr[$key]['name'] .= $value['name'].',';	}var_dump($newarr);
Copier après la connexion
Copier après la connexion



好的  谢谢指导
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal