博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP之数组学习
阅读量:6546 次
发布时间:2019-06-24

本文共 12924 字,大约阅读时间需要 43 分钟。

  对于网页编程来说,最重要的就是存取和读写数据了。存储方式可能有很多种,可以是字符串、数组、文件的形式等,今天学习了数组,可以说是PHP的数据应用中较重要的一种方式。PHP的数组函数众多,下面是我学习的小结,借此记之,便于以后鉴之……

 

  一、数组定义:

  数组的定义使用 array()方式定义,可以定义空数组:

 
<?
php
$number
=
array
(
1
,
3
,
5
,
7
,
9
);
//
定义空数组
$result
=
array
();
$color
=
array
(
"
red
"
,
"
blue
"
,
"
green
"
);
//
自定义键值
$language
=
(
1
=>
"
English
"
,
3
=>
"
Chinese
"
,
5
=>
"
Franch
"
);
//
定义二维数组
$two
=
array
(
"
color
"
=>
array
(
"
red
"
,
"
blue
"
)
,
//
用逗号结尾
"
week
"
=>
array
(
"
Monday
"
,
"
Friday
"
)
//
最后一句没有标点
);
?>

  二、创建数组:

  创建数组包含的函数有compact()、

    1.compact()函数——将一个或多个变量(包含数组)转换为数组:

      array compact ( mixed $varname [, mixed $... ] )  

 
<?
PHP
$number
=
"
1,3,5,7,9
"
;
$string
=
"
I'm PHPer
"
;
$array
=
array
(
"
And
"
,
"
You?
"
);
$newArray
=
compact
(
"
number
"
,
"
string
"
,
"
array
"
);
print_r
(
$newArray
);
?>

      compact()函数用于将两个或多个变量转换为数组,当然也包含数组变量。其参数是变量的名称而非带有$全名。

      相反的函数是extract()作用顾名思义就是将数组转换为单个的字符串,键值作为其字符串名称,数组值作为字符串的值。

      运行结果:

 
Array (
[
number
]
=
>
1
,
3
,
5
,
7
,
9
[
string
]
=
> I'm PHPer
[
array
]
=
> Array (
[
0
]
=
> And
[
1
]
=
> You? ) )

    2.array_combine()——将两个数组重组成一个数组,一个作键值一个做的值:

      array array_combine ( array $keys , array $values )

 
<?
PHP
$number
=
array
(
"
1
"
,
"
3
"
,
"
5
"
,
"
7
"
,
"
9
"
);
$array
=
array
(
"
I
"
,
"
Am
"
,
"
A
"
,
"
PHP
"
,
"
er
"
);
$newArray
=
array_combine
(
$number
,
$array
);
print_r
(
$newArray
);
?>

      array_combine函数不多说了,谁看了都明白

      运行结果:

 
Array ( [1] => I [3] => Am [5] => A [7] => PHP [9] => er )

    3.range()函数——创建指定范围的数组:

       不多说了,直接上实例——

 
<?
PHP
$array1
=
range
(
0
,
100
,
10
);
//
0为起始值,100为结束值,10为步进值(默认步进值为1).
print_r
(
$array1
);
echo
"
<br />
"
;
$array2
=
range
(
"
A
"
,
"
Z
"
);
print_r
(
$array2
);
echo
"
<br />
"
;
$array3
=
range
(
"
z
"
,
"
a
"
);
print_r
(
$array3
);
?>

      range()函数的默认步进值是1!

      运行结果:

 
Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )
Array ( [0] => A [1] => B [2] => C [3] => D [4] => E [5] => F [6] => G [7] => H [8] => I [9] => J [10] => K [11] => L [12] => M [13] => N [14] => O [15] => P [16] => Q [17] => R [18] => S [19] => T [20] => U [21] => V [22] => W [23] => X [24] => Y [25] => Z )
Array ( [0] => z [1] => y [2] => x [3] => w [4] => v [5] => u [6] => t [7] => s [8] => r [9] => q [10] => p [11] => o [12] => n [13] => m [14] => l [15] => k [16] => j [17] => i [18] => h [19] => g [20] => f [21] => e [22] => d [23] => c [24] => b [25] => a )

    4.array_fill()函数——填充数组函数:

 
<?
PHP
$array
=
range
(
1
,
10
);
$fillarray
=
range
(
"
a
"
,
"
d
"
);
$arrayFilled
=
array_fill
(
0
,
5
,
$fillarray
);
//
这里的$fillarray可以是字符串,如"test".
echo
"
<pre>
"
;
print_r
(
$arrayFilled
);
echo
"
</pre>
"
;
$keys
=
array
(
"
string
"
,
"
2
"
,
9
,
"
SDK
"
,
"
PK
"
);
$array2
=
array_fill_keys(
$keys
,
"
testing
"
);
echo
"
<pre>
"
;
print_r
(
$array2
);
echo
"
</pre>
"
;
?>

      运行结果:

 
Array
(
[
0] => Array
(
[
0] => a
[
1] => b
[
2] => c
[
3] => d
)
[
1] => Array
(
[
0] => a
[
1] => b
[
2] => c
[
3] => d
)
[
2] => Array
(
[
0] => a
[
1] => b
[
2] => c
[
3] => d
)
[
3] => Array
(
[
0] => a
[
1] => b
[
2] => c
[
3] => d
)
[
4] => Array
(
[
0] => a
[
1] => b
[
2] => c
[
3] => d
)
)
Array
(
[
string] => testing
[
2] => testing
[
9] => testing
[SDK]
=> testing
[PK]
=> testing
)

  三、数组的遍历:

    1.foreach遍历:

       foreach (array_expression as $value){}

       foreach (array_expression as $key => $value){}

      闲话少说,上实例:

 
<?
PHP
$speed
=
array
(
50
,
120
,
180
,
240
,
380
);
foreach
(
$speed
as
$keys
=>
$values
){
echo
$keys
.
"
=>
"
.
$values
.
"
<br />
"
;
}
?>

    运行结果:

 
0
=>
50
1
=>
120
2
=>
180
3
=>
240
4
=>
380

     2.while循环遍历:

      while循环遍历一般结合list函数,以下是实例

 
<?
PHP
$staff
=
array
(
array
(
"
姓名
"
,
"
性别
"
,
"
年龄
"
)
,
array
(
"
小张
"
,
"
"
,
24
)
,
array
(
"
小王
"
,
"
"
,
25
)
,
array
(
"
小李
"
,
"
"
,
23
)
);
echo
"
<table border=2>
"
;
while
(
list
(
$keys
,
$value
)
=
each
(
$staff
)){
list
(
$name
,
$sex
,
$age
)
=
$value
;
echo
"
<tr><td>
$name
</td><td>
$sex
</td><td>
$age
</td></tr>
"
;
}
echo
"
</table>
"
;
?>

    运行结果:

姓名 性别 年龄
小张 24
小王 25
小李 23

    3.for循环遍历:

 
<?PHP
$speed = range(0,220,20);
for($i =0;$i<count($speed);$i++) {
echo $speed[$i]."&nbsp;";
}
?>

    运行结果:

 
0
20
40
60
80
100
120
140
160
180
200
220

  四、数组的指针操作:

    涉及函数包括reset、prev、end、next、current、each

实例一:

 

 
<?PHP
$speed = range(0,220,20);
echo current($speed);//输出当前位置的值(在数组的开头位置)
$i = rand(1,11);
while($i--){
next($speed);//指针从当前位置向后移动一位
}
echo current($speed);//输出当前位置的值
echo "<br />";
echo prev($speed);//输出前一位置数组值
echo "<br />";
echo reset($speed);//重置数组的指针,将指针指向起始位置
echo "<br />";
echo end($speed);//输出最后位置的数组值
echo "<br />";
?>

    运行结果:

 
0220
200
0
220

实例二:each函数指针操作

 
<?
PHP
$speed
=
range
(
0
,
200
,
40
);
echo
"
each实现指针下移 <br />
"
;
echo
"
0挡的速度是
"
.
current
(
each
(
$speed
))
.
"
<br />
"
;
echo
"
1挡的速度是
"
.
current
(
each
(
$speed
))
.
"
<br />
"
;
echo
"
2挡的速度是
"
.
current
(
each
(
$speed
))
.
"
<br />
"
;
echo
"
3挡的速度是
"
.
current
(
each
(
$speed
))
.
"
<br />
"
;
echo
"
4挡的速度是
"
.
current
(
each
(
$speed
))
.
"
<br />
"
;
echo
"
5挡的速度是
"
.
current
(
each
(
$speed
))
.
"
<br />
"
;
echo
"
使用each函数实现数组指针的移动,进行数组遍历 <br />
"
;
reset
(
$speed
);
//
这里是将数组指针指向数组首
while
(
list
(
$key
,
$value
)
=
each
(
$speed
)){
echo
$key
.
"
=>
"
.
$value
.
"
<br />
"
;
}
?>

    运行结果:

 
each实现指针下移
0挡的速度是0
1挡的速度是40
2挡的速度是80
3挡的速度是120
4挡的速度是160
5挡的速度是200
使用each函数实现数组指针的移动,进行数组遍历
0
=>
0
1
=>
40
2
=>
80
3
=>
120
4
=>
160
5
=>
200

  五、数组的增添删改操作:

    1.增添数组成员:

实例一:$num[] = value直接赋值追加到数组末尾:

 

 
<?PHP
$num = array(1=>80,2=>120,3=>160);
echo "使用表达式添加数组成员<br />";
$num[]=240;
print_r($num);
?>
运行结果:
 
使用表达式添加数组成员
Array
( [
0
]
=>
80
[
1
]
=>
120
[
2
]
=>
160
[
3
]
=>
240
)

实例二:array_pad函数,数组数组首尾选择性追加

 
<?
PHP
$num
=
array
(
1
=>
80
,
2
=>
120
,
3
=>
160
);
$num
=
array_pad
(
$num
,
4
,
200
);
echo
"
使用array_pad函数向数组尾部添加成员<br />
"
;
print_r
(
$num
);
echo
"
<br />array_pad 还可以填充数组首部<br />
"
;
$num
=
array_pad
(
$num
,-
8
,
40
);
print_r
(
$num
);
?>

运行结果:

 
使用array_pad函数向数组尾部添加成员
Array
( [
0
]
=>
80
[
1
]
=>
120
[
2
]
=>
160
[
3
]
=>
200
)
array_pad
还可以填充数组首部
Array
( [
0
]
=>
40
[
1
]
=>
40
[
2
]
=>
40
[
3
]
=>
40
[
4
]
=>
80
[
5
]
=>
120
[
6
]
=>
160
[
7
]
=>
200
)

实例三:入栈操作追加(array_push):

 
<?
PHP
$num
=
array
(
1
=>
80
,
2
=>
120
,
3
=>
160
);
array_push
(
$num
,
200
,
240
,
280
);
//
可以自己追加,直接加在数组结尾
print_r
(
$num
);
?>

运行结果:

 
Array
( [
1
]
=>
80
[
2
]
=>
120
[
3
]
=>
160
[
4
]
=>
200
[
5
]
=>
240
[
6
]
=>
280
)

实例四:array_unshift()在开头添加数组成员

 
<?
PHP
$num
=
array
(
1
=>
80
,
2
=>
120
,
3
=>
160
);
array_unshift
(
$num
,
0
,
40
);
//
可以自己追加,直接加在数组结尾
print_r
(
$num
);
?>

运行结果:

 
Array
( [
0
]
=>
0
[
1
]
=>
40
[
2
]
=>
80
[
3
]
=>
120
[
4
]
=>
160
)

注意:array_unshift()函数使用后数组的键值将会从0开始!

     2.删减数组成员:

 实例一:unset()命令删除数组成员或数组:

 
<?PHP
$num = array_fill(0,5,rand(1,10));
print_r($num);
echo "<br />";
unset($num[4]);
print_r($num);
echo "<br />";
unset($num);
if(is_array){
echo "unset命令不能删除整个数组";
}
else{
echo "unset命令可以删除数组";
}
?>
运行结果:(运行出错及说明数组也被删除,不再存在)
 
Array
( [
0
]
=>
9
[
1
]
=>
9
[
2
]
=>
9
[
3
]
=>
9
[
4
]
=>
9
)
Array
( [
0
]
=>
9
[
1
]
=>
9
[
2
]
=>
9
[
3
]
=>
9
)
Notice
:
Use
of undefined
constant
is_array
-
assumed
'
is_array
'
in H
:
\wamp\www\testing\editorplus\test
.
php on line
21
unset命令不能删除整个数组

实例二:array_splice()函数删除数组成员

 
<?
php
$a
=
array
(
"
red
"
,
"
green
"
,
"
blue
"
,
"
yellow
"
);
count
(
$a
);
//
得到4
array_splice
(
$a
,
1
,
1
);
//
删除第二个元素
count
(
$a
);
//
得到3
echo
$a
[
2
];
//
得到yellow
echo
$a
[
1
];
//
得到blue
?>

实例三:array_unique删除数组中的重复值:

 
<?
php
$a
=
array
(
"
red
"
,
"
green
"
,
"
blue
"
,
"
yellow
"
,
"
blue
"
,
"
green
"
);
$result
=
array_unique
(
$a
);
print_r
(
$result
);
?>

运行结果:

 
Array
( [
0
]
=>
red [
1
]
=>
green [
2
]
=>
blue [
3
]
=>
yellow )
实例四:array_merge、array_merge_recursive合并数组
 
<?
php
$array1
=
array
(
"
r
"
=>
"
red
"
,
1
,
2
,
3
,
4
);
$array2
=
array
(
"
b
"
=>
"
blue
"
,
4
=>
5
,
6
,
7
,
8
,
9
);
$array3
=
array
(
"
r
"
=>
"
read
"
,
4
=>
10
,
2
=>
11
);
$array4
=
array
(
array
(
4
=>
10
)
,
array
(
7
=>
13
)
);
$array5
=
array
(
array
(
4
=>
11
)
,
array
(
6
=>
12
)
);
$result
=
array_merge
(
$array1
,
$array2
,
$array3
,
$array4
,
$array5
);
echo
"
<pre>
"
;
print_r
(
$result
);
echo
"
</pre>
"
;
$result
=
array_merge_recursive
(
$array1
,
$array2
,
$array3
,
$array4
,
$array5
);
echo
"
<pre>
"
;
print_r
(
$result
);
echo
"
</pre>
"
;
?>
运行结果:
 
Array
(
[r]
=>
read
[
0
]
=>
1
[
1
]
=>
2
[
2
]
=>
3
[
3
]
=>
4
[b]
=>
blue
[
4
]
=>
5
[
5
]
=>
6
[
6
]
=>
7
[
7
]
=>
8
[
8
]
=>
9
[
9
]
=>
10
[
10
]
=>
11
[
11
]
=>
Array
(
[
4
]
=>
10
)
[
12
]
=>
Array
(
[
7
]
=>
13
)
[
13
]
=>
Array
(
[
4
]
=>
11
)
[
14
]
=>
Array
(
[
6
]
=>
12
)
)
Array
(
[r]
=> Array
(
[0] => red
[1] =>
read
)
[
0
]
=>
1
[
1
]
=>
2
[
2
]
=>
3
[
3
]
=>
4
[b]
=>
blue
[
4
]
=>
5
[
5
]
=>
6
[
6
]
=>
7
[
7
]
=>
8
[
8
]
=>
9
[
9
]
=>
10
[
10
]
=>
11
[
11
]
=>
Array
(
[
4
]
=>
10
)
[
12
]
=>
Array
(
[
7
]
=>
13
)
[
13
]
=>
Array
(
[
4
]
=>
11
)
[
14
]
=>
Array
(
[
6
]
=>
12
)
)
注:1.array_merge的键名是数字的将重新建立索引;遇到相同的字符串键名时,后面的将覆盖前面的。

  2.array_merge_recursive函数的作用是将相同字符串的键名单元整合成一个数组。

  六、数组的键值和值操作:

实例一:in_array()检测数组中是否有某个值存在

 
<?
php
$array
=
range
(
0
,
9
);
if
(
in_array
(
9
,
$array
)){
echo
"
数组中存在
"
;
}
?>

运行结果:

数组中存在

实例二:key()取得数组当前的键名:

 
<?
php
$array
=
range
(
0
,
9
);
$num
=
rand
(
0
,
8
);
while
(
$num
--
)
next
(
$array
);
$key
=
key
(
$array
);
echo
$key
;
?>

此实例结果为动态结果,范围(0-8),不做结果演示。

实例三:list()函数把数组中的值赋给指定变量:

 
<?
PHP
$staff
=
array
(
array
(
"
姓名
"
,
"
性别
"
,
"
年龄
"
)
,
array
(
"
小张
"
,
"
"
,
24
)
,
array
(
"
小王
"
,
"
"
,
25
)
,
array
(
"
小李
"
,
"
"
,
23
)
);
echo
"
<table border=2>
"
;
while
(
list
(
$keys
,
$value
)
=
each
(
$staff
)){
list
(
$name
,
$sex
,
$age
)
=
$value
;
echo
"
<tr><td>
$name
</td><td>
$sex
</td><td>
$age
</td></tr>
"
;
}
echo
"
</table>
"
;
?>
运行结果:

2011053022113576.png

实例四:array_flip()交换数组的键值和值:

 
<?
PHP
$array
=
array
(
"
red
"
,
"
blue
"
,
"
yellow
"
,
"
Black
"
);
print_r
(
$array
);
echo
"
<br />
"
;
$array
=
array_flip
(
$array
);
print_r
(
$array
);
?>

运行结果:

 
Array ( [0] => red [1] => blue [2] => yellow [3] => Black )
Array ( [red] => 0 [blue] => 1 [yellow] => 2 [Black] => 3 )

实例五:array_keys()、array_values()返回数组中所有的键值和值:

 
<?
PHP
$array
=
array
(
"
red
"
,
"
blue
"
,
"
yellow
"
,
"
Black
"
);
$result
=
array_keys
(
$array
);
print_r
(
$result
);
echo
"
<br />
"
;
$result
=
array_values
(
$array
);
print_r
(
$result
);
?>

运行结果:

 
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 )
Array ( [0] => red [1] => blue [2] => yellow [3] => Black )

实例六:array_search()搜索数值:

 
<?
PHP
$array
=
array
(
"
red
"
,
"
blue
"
,
"
yellow
"
,
"
Black
"
);
$result
=
array_search
(
"
red
"
,
$array
);
if
((
$result
===
NULL
)){
echo
"
不存在数值red
"
;
}
else
{
echo
"
存在数值
$result
"
;
}
?>

结果:存在数值 0

函数array_search()返回的值可能为false或0或NULL,所以在判断时注意要用"==="

  七、数组的排序:

实例一:sort()、rsort()/asort()、arsort()对数组排序:

 
<?
PHP
$array
=
array
(
"
b
"
,
"
c
"
,
"
d
"
,
"
a
"
);
sort
(
$array
);
//
从低到高排序
print_r
(
$array
);
echo
"
<br />
"
;
rsort
(
$array
);
//
逆向排序
print_r
(
$array
);
?>

结果:

 
Array ( [0] => a [1] => b [2] => c [3] => d )
Array ( [0] => d [1] => c [2] => b [3] => a )

sort()、rsort()函数对数组进行从低到高的排序,返回结果为bool值;

asort()、arsort()函数是保留键值的排序,排序后键值不重新索引。

实例二:将数组顺序打乱——shuffle()函数:

 
<?PHP
$array = array("a","b","c","d");
shuffle($array);//从低到高排序
print_r($array);
?>

结果为动态结果:

 
Array
( [
0
]
=>
c [
1
]
=>
a [
2
]
=>
d [
3
]
=>
b )

shuffle的结果有点随机的意味,每次刷新都不一样。

实例三:array_reverse()数组反向:

 
<?PHP
$array = array("d","b","a","c");
$array = array_reverse($array);//从低到高排序
print_r($array);
?>

运行结果:

 
Array
( [
0
]
=>
c [
1
]
=>
a [
2
]
=>
b [
3
]
=>
d )

实例四:自然排序算法——natsort()和natcasesort();

 
<?
PHP
$array
=
array
(
"
sort2
"
,
"
Sort5
"
,
"
sort1
"
,
"
sort4
"
);
natsort
(
$array
);
//
从低到高排序
print_r
(
$array
);
echo
"
<br />
"
;
natcasesort
(
$array
);
print_r
(
$array
);
?>

结果:

 
Array
( [
1
]
=>
Sort5 [
2
]
=>
sort1 [
0
]
=>
sort2 [
3
]
=>
sort4 )
Array
( [
2
]
=>
sort1 [
0
]
=>
sort2 [
3
]
=>
sort4 [
1
]
=>
Sort5 )

natsort()、natcasesort()对数组进行自然排序,就是使用数字的正常排序算法。natcasesort会忽略大小写。

实例五:对数组进行键值排序ksort():

 
<?
PHP
$array
=
array
(
1
=>
"
sort2
"
,
4
=>
"
Sort5
"
,
2
=>
"
sort1
"
,
3
=>
"
sort4
"
);
ksort
(
$array
);
//
从低到高排序
print_r
(
$array
);
?>

结果:

 
Array
( [
1
]
=>
sort2 [
2
]
=>
sort1 [
3
]
=>
sort4 [
4
]
=>
Sort5 )

注意:ksort()函数重新建立了索引。

  八、数组的其他用法:

  cout($array) --------统计数组的单元个数

  array_diff($array1,$array2)----------统计数组之间的不同点,返回第一个数组中有而第二个数组中没有的。

  array_diff_assoc($array1,$array2)---------同array_diff(),只是它对键值也比较

  array_diff_key($array1,$array2)------------比较键值

  array_product($array)-----------返回数组的所有数的乘积

  array_sum($array)--------------所有数值的和

  array_rand($array,$n)----------在$array数组中取出$n个数值,返回数组

  array_intersect($array1,$array2)----------------取得两个数组的交集

  array_intersect_assoc($array1,$array2)---------------在array_intersect 的基础上进行键值比较

  array_intersect_key($array1,$array2)-----------------比较两个数组键值的交集

  总结:

  数组的使用在PHP中至关重要,由于PHP没有指针,所以数组承担了很大的数据操作任务。学好数组,才能把PHP应用的得心应手,这里所列均是常用的PHP数组相关的函数及用法,欢迎一起学习!

转载于:https://www.cnblogs.com/picaso/archive/2011/05/31/2060347.html

你可能感兴趣的文章
Servlet Demo
查看>>
Struts2中的<s:action>标签
查看>>
Java中取某一个范围的随机数
查看>>
Linux 进程管理
查看>>
一条复杂SQL实现思路
查看>>
我的友情链接
查看>>
android app 退出时提示确认
查看>>
win10 配置
查看>>
java 编译100个范例
查看>>
我的友情链接
查看>>
引用的初步认识
查看>>
c++11 istream_iterator & copy
查看>>
Session Cookie ServletContext
查看>>
Activity设置全屏以及Android获得屏幕的宽和高
查看>>
Android中几种图像特效处理
查看>>
Linux系统中的Nginx由于缓存导致页面不刷新的解决方法
查看>>
web服务
查看>>
JEESZ分布式框架--技术介绍文档
查看>>
人工智能,机器学习和深度学习之间的差异是什么?
查看>>
LVM讲解和磁盘挂载故障
查看>>