PHP还是比较常用的,于是我研究了一下PHP二维数组。在处理php数组的时候,有一种需求特别的频繁,如下二维数组:
1
2
3
4
5
6
7
8
9
10
$arr = array(
1=>array(
‘id’ => 5,
‘name’ => ‘张三’
),
2=>array(
‘id’ => 6,
‘name’ => ‘李四’
)
);
目的就是要取到key为name的集合,得到这个结果:
1
2
3
4
$arr2 = array(
0=>‘张三’,
1=>‘李四’
);
这里有几种方法:
1:最简单的,foreach遍历数组:
1
2
3
foreach ($arr as $key => $value) {
$arr2[] = $value[‘name’];
}
2:代码量稍微少一点的代码,使用了 array_map 这个php方法:
1
a
r
r
2
=
a
r
r
a
y
m
a
p
(
′
a
r
r
a
y
s
h
i
f
t
′
,
arr2 = array_map('array_shift',
arr2=arraymap(′arrayshift′,arr);
意为把
a
r
r
数
组
的
每
一
项
值
的
开
头
的
值
移
出
,
并
返
回
被
移
出
的
每
一
项
值
中
被
移
出
的
值
,
注
意
此
时
新
数
组
arr数组的每一项值的开头的值移出,并返回被移出的每一项值中被移出的值,注意此时新数组
arr数组的每一项值的开头的值移出,并返回被移出的每一项值中被移出的值,注意此时新数组arr2的键仍是原数组$arr的键
2.1:在方法2的基础上,可以稍微开一下脑洞,如果需要获取的是二维数组的每一项的开头列或结尾列,也可以这样做:
1
2
a
r
r
2
=
a
r
r
a
y
m
a
p
(
′
r
e
s
e
t
′
,
arr2 = array_map('reset',
arr2=arraymap(′reset′,arr);
a
r
r
2
=
a
r
r
a
y
m
a
p
(
′
e
n
d
′
,
arr2 = array_map('end',
arr2=arraymap(′end′,arr);
哈哈,也是很方便的
3:还可以使用 array_reduc e方法,不过代码略多,不过这个方法的想象空间(针对别的数组取值操作)还是蛮大的:
1
a
r
r
2
=
a
r
r
a
y
r
e
d
u
c
e
(
arr2 = array_reduce(
arr2=arrayreduce(arr, create_function(’$result,
v
′
,
′
v', '
v′,′result[] = $v[“name”];return
r
e
s
u
l
t
;
′
)
)
;
a
r
r
a
y
r
e
d
u
c
e
方
法
用
回
调
函
数
迭
代
地
将
对
数
组
的
值
进
行
操
作
,
而
c
r
e
a
t
e
f
u
n
c
t
i
o
n
用
于
一
个
匿
名
方
法
做
回
调
用
,
这
个
匿
名
方
法
的
参
数
result;')); array_reduce方法用回调函数迭代地将对数组的值进行操作,而create_function用于一个匿名方法做回调用,这个匿名方法的参数
result;′));arrayreduce方法用回调函数迭代地将对数组的值进行操作,而createfunction用于一个匿名方法做回调用,这个匿名方法的参数result为上一次迭代产生的值,
v
是
当
前
的
值
,
内
部
实
现
既
为
获
取
到
数
组
v是当前的值,内部实现既为获取到数组
v是当前的值,内部实现既为获取到数组arr每一项的”name”的值并push到新$result数组;
4:最后这个终极方法实在是太爽了,一个方法就搞定,而且非常灵活:
1
a
r
r
2
=
a
r
r
a
y
c
o
l
u
m
n
(
arr2 = array_column(
arr2=arraycolumn(arr, ‘name’);
第二个参数为想要获取的那一列的键名,是不是很方便呢,不过这个方法有个限制,就是php版本必须 >= 5.5.0,在陈旧项目中使用这个方法还是得斟酌一下哈
PS: php中遍历二维数组的几种方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"; } echo "
姓名 | 年龄 |
"; echo $arr2[$i][$j]; echo " |
//使用foreach遍历
<?php $arr = array('one'=>array('name'=>'张三','age'=>'23','sex'=>'男'), 'two'=>array('name'=>'李四','age'=>'43','sex'=>'女'), 'three'=>array('name'=>'王五','age'=>'32','sex'=>'男'), 'four'=>array('name'=>'赵六','age'=>'12','sex'=>'女')); foreach($arr as $k=>$val){ echo $val['name'].$val['age'].$val['sex'].""; } echo "
"; ?>
<?php $arr = array('one'=>array('name'=>'张三','age'=>'23','sex'=>'男'), 'two'=>array('name'=>'李四','age'=>'43','sex'=>'女'), 'three'=>array('name'=>'王五','age'=>'32','sex'=>'男'), 'four'=>array('name'=>'赵六','age'=>'12','sex'=>'女')); foreach($arr as $key=>$value){ foreach($value as $key2=>$value2){ echo $value2; } echo ""; } ?>