PHPpython 数组组重组 把相同含有ID的放到一个新的数组了!

PHP基础教程(8):PHP数组
&数组能够在单独的变量名中存储一个或多个值。
什么是数组?
在使用 PHP 进行开发的过程中,或早或晚,您会需要创建许多相似的变量。
无需很多相似的变量,你可以把数据作为元素存储在数组中。
数组中的元素都有自己的 ID,因此可以方便地访问它们。
有三种数组类型:
数值数组带有数字 ID 键的数组关联数组数组中的每个 ID 键关联一个值多维数组包含一个或多个数组的数组
数值数组存储的每个元素都带有一个数字 ID 键。
可以使用不同的方法来创建数值数组:
在这个例子中,会自动分配 ID 键:
$names = array(&Peter&,&Quagmire&,&Joe&);
在这个例子中,我们人工分配的 ID 键:
$names[0] = &Peter&;
$names[1] = &Quagmire&;
$names[2] = &Joe&;
可以在脚本中使用这些 ID 键:
$names[0] = &Peter&;
$names[1] = &Quagmire&;
$names[2] = &Joe&;
echo $names[1] . & and & . $names[2] . & are &. $names[0] . &'s neighbors&;
以上代码的输出:
Quagmire and Joe are Peter's neighbors
关联数组,它的每个 ID 键都关联一个值。
在存储有关具体命名的值的数据时,使用数值数组不是最好的做法。
通过关联数组,我们可以把值作为键,并向它们赋值。
在本例中,我们使用一个数组把年龄分配给不同的人:
$ages = array(&Peter&=&32, &Quagmire&=&30, &Joe&=&34);
本例与例子 1 相同,不过展示了另一种创建数组的方法:
$ages['Peter'] = &32&;
$ages['Quagmire'] = &30&;
$ages['Joe'] = &34&;
可以在脚本中使用 ID 键:
$ages['Peter'] = &32&;
$ages['Quagmire'] = &30&;
$ages['Joe'] = &34&;
echo &Peter is & . $ages['Peter'] . & years old.&;
以上脚本的输出:
Peter is 32 years old.
在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,以此类推。
在本例中,我们创建了一个带有自动分配的 ID 键的多维数组:
$families = array
&Griffin&=&array
&Quagmire&=&array
&Brown&=&array
&Cleveland&,
&Loretta&,
如果输出这个数组的话,应该类似这样:
[Griffin] =& Array
[0] =& Peter
[1] =& Lois
[2] =& Megan
[Quagmire] =& Array
[0] =& Glenn
[Brown] =& Array
[0] =& Cleveland
[1] =& Loretta
[2] =& Junior
让我们试着显示上面的数组中的一个单一的值:
echo &Is & . $families['Griffin'][2] .
& a part of the Griffin family?&;
以上代码的输出:
Is Megan a part of the Griffin family?
第一时间获取超站的更新内容,可以通过如下方式关注我们哦!!
2:新浪微博
3:微信账号:isupadmin
请输入评论内容
 推荐信息
 关注微信:chenglingorg
 每日必看
 热门文章
 最新发布
 相关推荐当前位置: & php将两个一维数组合并,..
php将两个一维数组合并,分别将这两个数组的值,作为新数组的keys和value,要求不删除重复的数字?
问题补充:
php中的array_combine会删除相同的值,count($a)=4,count($b)=4,count($c)却是3如
$a=array(1,2,4,1);
$b=array(a1,a2,a3,a4);$c=array_combine($a,$b)后出现:
array(4) { [0]=& int(1) [1]=& int(2) [2]=& int(4) [3]=& int(1) }&
array(4) { [0]=& string(2) "a1" [1]=& string(2) "a2" [2]=& string(2) "a3" [3]=& string(2) "a4" }&
array(3) { [1]=& string(2) "a4" [2]=& string(2) "a2" [4]=& string(2) "a3" }&
少了一个数字1,如何才能原版的输出,
php中的array_combine会删除相同的值,count($a)=4,count($b)=4,count($c)却是3如
$a=array(1,2,4,1);
$b=array(a1,a2,a3,a4);$c=array_combine($a,$b)后出现:
array(4) { [0]=& int(1) [1]=& int(2) [2]=& int(4) [3]=& int(1) }&
array(4) { [0]=& string(2) "a1" [1]=& string(2) "a2" [2]=& string(2) "a3" [3]=& string(2) "a4" }&
array(3) { [1]=& string(2) "a4" [2]=& string(2) "a2" [4]=& string(2) "a3" }&
少了一个数字1,如何才能原版的输出,
问题标签:
首先你要知道一个数组的key应该是唯一的,而你的做key的数组$a=array(1,2,4,1)里面的值并不是唯一的,而是有2个1,这样在合并的时候就会冲突,除非你有冲突的解决方案,否则一个数组中不可能出现$a[1] = a1,又出现$a[1] = a4的情况,所以你说的不现实。一般来说解决的方案无非是
1、加上修饰例如 $a[1_0] = a1, $a[1_1] = a4
2、变成多维数组 $a[1] = array(a1, a4)
您尚未登陆,请
之后再提交答案!
没有账号?
“送人玫瑰 手留余香”,您的建议可能影响他人一生。希望所有用户能够严肃对待回答,尽可能地为用户提供准确、全面、可信、有建设意义的高质量答案。
以下情况,用户回答一经发现,立即删除:
1、回答内容不能出现任何形式的广告、灌水行为,尤其是指向提供单位主站(页)的网址链接;
2、回答内容答非所问,与提问毫无关联或者关联性不大;
3、回答内容不能恶意中伤他人或其他单位的;
4、回答内容禁止复制粘贴大幅网络内容,提供无建设性意见的回答;
5、回答内容存在误导他人的事实性错误或过于偏激的主观臆断;
6、回答内容需符合法律法规及道德规范,不能含有脏话,恶意攻击,恐怖或者教唆犯罪,涉及歧视、误导等内容。
深圳市一览网络股份有限公司 版权所有 & 粤ICP备号 增值电信业务经营许可证:粤B2-php将数组键值相同的数组合并数组为一个数组_百度知道
php将数组键值相同的数组合并数组为一个数组
有这样一个数组:$arr1 = array(
array(&username&=&&piaoyudesi&,&email&=&&&,&address&=&&shenzhen&,&item_id&=&&10058&,&item_title&=&&BPS8&),
array(&username&=&&huaka&,&email&=&&&,&address&=&&zhongshan&,&item_id&=&&10087&,&item_title&=&&BPS9&),
array(&username&=&&huakai&,&email&=&&&,&address&=&&zhongshan&,&item_id&=&&10047&,&item_title&=&&BPS10&),
array(&username&=&&piaoyudesi&,&email&=&&&,&address&=&&shenzhen&,&item_id&=&&10042&,&item_title&=&&BPS10&),
array(&username&=&&jimowenxin&,&email&=&&&,&address&=&&zhuhai&,&item_id&=&&10031&,&item_title&=&&BPS18&)
);数组中有用户信息username,email,address,产品信息item_id,item_title也就是同一个用户购买了不同的产品,现在要把username相同的值合并,但是item_id,item_title不能合并合并之后最好是这样的数组array(&username=&&piaoyudesi&,
&email&=&&&,
&address&=&&shenzhen&,
&goods&=&array(array(&item_id&=&&10058&,&item_title&=&BPS8&),
array(&item_id&=&&10047&, &item_title&=&BPS10&)
)array(&username=&&huakai&,
&email&=&&&,
&address&=&&zhongshan&,
&goods&=&array(array(&item_id&=&&10087&, &item_title&=&BPS9&),
array(&item_id&=&&10047&, &item_title&=&BPS10&)
)array(&username=&&jimowenxin&,
&email&=&&&,
&address&=&&zhuhai&,
&goods&=&array(array(&item_id&=&&10031&, &item_title&=&BPS18&)
提问者采纳
把'huaka'改成了'huakai'似乎是一个人&?php$a=array( array(&username&=&&piaoyudesi&,&email&=&&&,&address&=&&shenzhen&,&item_id&=&&10058&,&item_title&=&&BPS8&), array(&username&=&&huakai&,&email&=&&&,&address&=&&zhongshan&,&item_id&=&&10087&,&item_title&=&&BPS9&), array(&username&=&&huakai&,&email&=&&&,&address&=&&zhongshan&,&item_id&=&&10047&,&item_title&=&&BPS10&), array(&username&=&&piaoyudesi&,&email&=&&&,&address&=&&shenzhen&,&item_id&=&&10042&,&item_title&=&&BPS10&), array(&username&=&&jimowenxin&,&email&=&&&,&address&=&&zhuhai&,&item_id&=&&10031&,&item_title&=&&BPS18&));$u=array();foreach($a as $k=&&$e){ $name=&$e['username']; if(!isset($u[$name])){
$u[$name]=$e;
unset($u[$name]['item_id'],$u[$name]['item_title']); } $u[$name]['goods'][]=array('item_id'=&$e['item_id'],'item_title'=&$e['item_title']);}$a=array_values($u); unset($u);print_r($a);=========Array(
[0] =& Array
[username] =& piaoyudesi
[email] =&
[address] =& shenzhen
[goods] =& Array
[0] =& Array
[item_id] =& 10058
[item_title] =& BPS8
[1] =& Array
[item_id] =& 10042
[item_title] =& BPS10
[1] =& Array
[username] =& huakai
[email] =&
[address] =& zhongshan
[goods] =& Array
[0] =& Array
[item_id] =& 10087
[item_title] =& BPS9
[1] =& Array
[item_id] =& 10047
[item_title] =& BPS10
[2] =& Array
[username] =& jimowenxin
[email] =&
[address] =& zhuhai
[goods] =& Array
[0] =& Array
[item_id] =& 10031
[item_title] =& BPS18
提问者评价
非常感谢~~
其他类似问题
3人觉得有用
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁php数组声明,遍历,数组全局变量 - 推酷
php数组声明,遍历,数组全局变量
数组声明,遍历,数组全局变量
* 一、数组的概述
* 1.数组的本质:管理和操作一组变量,成批处理
* 2.数组时复合类型(可以存储多个)
* 3.数组中可以存储任意长度的数据,也可以存储任意类型的数据
* 4.数组可以完成其他语言数据结构的功能(链表,队列,栈,集合类)
* 二、数组的分类
数组中有多个单元,(单元称为元素)
每个元素(下标[键]和值)
单访问元素的时候,都是通过下标(键)来访问元素
1.一维数组,二维数组,三维数组。。。多维数组
(数组的数组,就是在数组中存有其他的数组)
2.PHP中有两种数组
索引数组:就是下标是顺序整数的索引
关联数组:就是下标是字符串作为索引
下标(整数,字符串)只有这两种
* 三、数组多种声明方式
* 1.直接为数组元素赋值声明
如果索引下标不给出,就会从0开始顺序索引
如果给出索引下标,下一个就会从最大的开始增1
如果后面出现前面的下标,如果是赋值就是为前面的元素重新赋值
混合声明时,索引和关联不互相影响(不影响索引下标的声明)
* 2.使用array()函数声明
默认是索引数组
如果为关联数组和索引数组指定下标,使用 键=&值
多个成员之间使用& , &分割
* 3.使用其他的函数声明
//索引数组
$user[0]=1;//用户序号
$user[1]=&zhangsan&;//用户名
$user[2]=10;//年龄
$user[3]=&nan&;//性别
echo '&pre&';
print_r($user);
echo '&/pre&';
//关联数组
$user[&id&]=1;
$user[&name&]=&zhangsan&;
$user[&age&]=10;
$user[&sex&];
$user[&age&]=90;//赋值
echo $user[&name&];//输出
//使用array()声明数组
$user=array(1,&zhangsan&,10,&nan&);
//使用array()声明关联数组
$user=array(&id&=&1,&name&=&&zhangsan&,&age&=&10,&sex&=&&nan&);
//声明多维数组(多条记录),来保存一个表中的多条用户信息记录
$user=array(
//用$user[0]调用这一行,比如调用这条记录中的姓名,$user[0][1]
array(1,&zhangsan&,10,&nan&),
//用$user[1]调用这一行,比如调用这条记录中的姓名,$user[1][1]
array(2,&lisi&,20,&nv&)
//数组保存多个表,每个表有多条记录
$info=array(
&user&=&array(
array(1,&zhangsan&,10,&nan&),
array(2,&lisi&,20,&nv&)
&score&=&array(
array(1,90,80,70),
array(2,60,40,70)
echo $info[&score&][1][1];//输出60,
数组超级全局变量
/* 预定义数组:
自动全局变量---超全局数组
1.包含了来自WEB服务器,客户端,运行环境和用户输入的数据
2.这些数组比较特别
3.全局范围内自动生效,都可以直接使用这些数组
4.用户不能自定义这些数组,但这些数组的操作方式和自己定义的数组操作的方式一样
5.在函数中直接可以使用这些数组
* $_GET //经由URL请求提交至脚本的变量
//经由HTTP POST 方法提交到脚本的变量
* $_REQUEST //经由GET , POST和COOKIE机制提交 到脚本的变量
//经由http post方法文件上传而提交至脚本的变量
* $_COOKIE
* $_SESSION
//执行环境提交至脚本的变量
* $_SERVER //变量由WEB服务器设定的,或直接和当前脚本的执行环境相关联
* $GLOBALS //只要是当前脚本有效的变量都在这里,数组的键名为全局脚本的名称
//超全局数组在函数内部可以直接调用
$arr=array(10,20);//一般数组
$_GET=array(50,90);//超全局数组
function demo(){
global $//调用全局变量要先包含
print_r($arr);
print_r($_GET);//直接调用超全局数组不用包含
&!-- **********页面传值get请求*************** --&
//直接把传的值当变量用,当php.ini配置文件中register_global=on时有用。
echo $username.&&br&&;
echo $email.&&br&&;
echo $page.&&br&&;
//最稳定的取值方法
echo $_GET[&username&].&&br&&;
echo $_GET[&email&].&&br&&;
echo $_GET[&page&].&&br&&;
&a href=&demo.php?username=zhangsan&email=&page=45&&this is a $_GET test&/a&
&!-- ***********页面传值post请求**************** --&
&form action=&demo.php& method=&post&&
username:&input type=&text& name=&uname& /& &br/&
password:&input type=&password& name=&pass& /& &br/&
&input type=&submit& value=&login& /& &br /&
print_r($_GET);//不能接收到
print_r($_POST);//这样才能接收到
//$_ENV的使用
echo'&pre&';
print_r($_ENV);
echo'&/pre&';
//显示当前环境
// 也可以单个遍历
//利用$GLOBALS超全局数组在函数内部调用全局变量
function demo()
//直接调用全局变量
echo $GLOBALS[&a&].&&br&&;
echo $GLOABLS[&b&].&&br&&;
echo $GLOABLS[&c&].&&br&&;
/* 数组的遍历
1.使用for语句循环遍历数组
1.其他语言(只有这一种方式)
2.PHP中这种方式不是首选的方式
3.数组必须是索引数组,而且下标必须是连续的。
(索引数组下标可以不连续,数组还有关联数组,这两种不能遍历)
2.使用foreach语句循环遍历数组
foreacho(数组变量 as 变量值){
1.循环次数由数组的元素个数决定
2.每一次循环都会将数组中的元素分别赋值给后面变量
foreach(数组变量 as 下标变量=& 值变量){
3.while() list() each() 组合循环遍历数组
* each()函数:
1.需要一个数组作为参数
2.返回来的也是一个数组
3.返回来的数组是0,1,key,value四个下标(固定的)
0和key下标是当前参数数组元素的键
1和value下标是当前参数数组元素的值
4.默认当前元素就是第一个元素
5.每执行一次后就会将当前元素向后移动
6.如果到最后的元素再执行这个函数,则返回false
* list()函数:
1. list()=array();需要将一个数组赋值给这个函数
2.数组中的元素个数,要和list()函数中的参数个数相同
3.数组中的每个元素值会赋值list()函数中的每个参数,list()将每个参数转为变量
4.list()只能接受索引数组
5.按索引的下标顺序来给参数赋值
//for语句遍历数组
$user=array(1,&zhangsan&,40,&nan&);
for($i=0;$i&4;$i++)
echo&$user[{$i}]=&.$user[$i].&&br&&;
//使用foreach
$user=array(1,&zhangsan&,40,&nan&);
foreach($user as $val)//$val是自定义变量
echo $val.&&br&&;//输出与下标无关
foreach($user as $key=&$val)//$val $key 都是自定义变量
echo $key.&=====&&.$val.&&br&&;
//foreach遍历多维数组
$info=array(
&user&=&array(
//$user[0]
array(1, &zansan&, 10, &nan&),
//$user[1][1]
array(2, &lisi&, 20, &nv&),
//$user[1]
//$user[2]
array(3, &wangwu&, 30, &nan&)
&score&=&array(
array(1, 100, 90, 80),
array(2, 99, 88, 11),
array(3, 10, 50, 88)
&connect&=&array(
array(1, '110', ''),
array(2, '120', ''),
array(3, '119', '')
foreach($info as $tableName=&$table)
echo '&table align=&center& width=&500& border=&1&&';
echo '&caption&&h1&'.$tableName.'&/h1&&/caption&';
foreach($table as $row)
echo '&tr&';
foreach($row as $col)
echo '&td&'.$col.'&/td&';
echo '&/tr&';
echo '&/table&';
//each()的使用
$user=array(&id&=&1,&name&=&&zhangsan&,&age&=&10,&sex&=&&nan&);
$a=each($user);//Array ( [1] =& 1 [value] =& 1 [0] =& id [key] =& id )
默认是第一个元素的值
print_r($a);
$b=each($user);
print_r($b);//Array ( [1] =& zhangsan [value] =& zhangsan [0] =& name [key] =& name ) 每执行一次,向后遍历一个
$c=each($user);
print_r($c);//Array ( [1] =& 10 [value] =& 10 [0] =& age [key] =& age )
$d=each($user);
print_r($d);//Array ( [1] =& nan [value] =& nan [0] =& sex [key] =& sex )
$e=each($user);
var_dump($e);//bool(false)
当没有元素时,返回的值
//each()配合while遍历
$user=array(&id&=&1,&name&=&&zhangsan&,&age&=&10,&sex&=&&nan&);
while($arr=each($user))
//echo $arr[0].&====&&.$arr[1].&&br&&;//通过0,1 来显示 键(下标) 和 值
echo $arr[&key&].&===&&.$arr[&value&].&&br&&;//通过key,value 来显示 键 值
//list()函数的使用
list($name,$age,$sex)=array(&zhangsan&,10,&nnnnn&);
echo $name.&&br&&;
echo $age.&&br&&;
echo $sex.&&br&&;
//另一种使用方法
list(,,$sex)=array(&zhangsan&,10,&nnnnn&);
echo $sex.&&br&&;//只把性别转换为变量
$ip=&192.168.1.128&;
list(,,,$d)=explode(&.&,$ip);//explode表示用 . 来分隔,并返回一个数组
echo $d;//取出128
//list()只能接收索引数组的例子
$user=array(&id&=&1,&name&=&&zhangsan&,&age&=&10,&sex&=&&nan&);
list($key,$value)=each($user);//Array( [1]=&1 [0]=&id) 按照索引下标的顺序给list中的参数赋值,所以先是 0键
然后是 1值
echo $key.&---&&.$
//while list() each()
$user=array(&id&=&1,&name&=&&zhangsan&,&age&=&10,&sex&=&&nan&);
while(list($key,$value)=each($user))
echo $key.&---&&.$value.&&br&&;
//多次循环只显示一次的解决方法
//使用数组的内部指针控制函数
//next(数组);数组指针移动到下一个
//prev(数组);数组指针移动到上一个
//reset(数组);数组指针移动到第一个(复位)
//end(数组);数组指针移动到最后一个
//current(数组);获取当前元素的值,当前元素时指数组指针指向的元素。
//key(数组);获取当前元素的键值(下标)
$user=array(&id&=&1,&name&=&&zhangsan&,&age&=&10,&sex&=&&nan&);
while(list($key,$value)=each($user))
echo $key.&---&&.$value.&&br&&;
//在这里将数组指针移动到第一个以下循环就能输出
//reset($user)
while(list($key,$value)=each($user))//因为each()到最后一个返回false,所以循环直接跳出
echo $key.&---&&.$value.&&br&&;
while(list($key,$value)=each($user))//因为each()到最后一个返回false,所以循环直接跳出
echo $key.&---&&.$value.&&br&&;
echo current($user).&=====&&.key($user);
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见}

我要回帖

更多关于 js 数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信