PHP编程中“数组”的基础知识

上一篇 / 下一篇  2006-11-15 09:20:56

关于数组:PHPChina 开源社区门户EkI/~!b]M(X
PHP中的数组是复杂的,并且比许多其他高级语言中的数组更灵活。
I$U5L/O9{A0数组array是一组有序的变量,其中每个变量被叫做一个元素。
X2XQpR ~0数组可以被编号或者相关联,也就是数组的元素可以分别根据数字索引或文本化字符串来访问PHPChina 开源社区门户k}|@9L/j Q
PHP中,数组可以包含标量(整数,布尔,字符串,浮点数)或复合值(对象甚至其他数组),并且可以包含不同类型的值PHPChina 开源社区门户0M4zl%T7B+Yt Wf2R
1。创建数组
@W"`1iVVu0PHP提供创建数组的array()语言结构PHPChina 开源社区门户;_jP$H!Xi j
$numbers = array(5,4,3,2,1);
|uLO }O8C0$words = array("web","database","application");PHPChina 开源社区门户6p6VPt"zNq t }!Q
echo $numbers[2];
wA4OWoY/Or0echo $words[0];PHPChina 开源社区门户1H-bE&{Y
---------------------输出结果----------------------------------------
A M]nR/R5nX03webPHPChina 开源社区门户"D| kyq.k ~'^P
---------------------------------------------------------------------PHPChina 开源社区门户.u,F)k0^}l
默认情况下,数组的第一个元素的索引为0。数组中包含的值可以通过使用方括号[]语法来检索和修改
qUH+Jeu0$numbers[5] = 0;
YEld?0数字化索引的数组可以创建位从任何索引值开始PHPChina 开源社区门户-?JRq6X r
$numbers = array(1=>"one","two","three","four");
4BG+H&uG.}!I-Z*R0也可以松散的索引
Ov)G9e"J v#E0$numbers = array(1=>"one",3=>"three",5=>"zero");
%szH1\L+X ?nO0可以通过给变量赋予一个没有参数的array()来创建空数组。然后可以通过使用方括号[]语法来添加值
O+Lz4SP8Kn.V4q0~0$error = array();PHPChina 开源社区门户8l ^)hzOQl cS
$error[] = "no error!!!";
h@5L$yf~ ^gGb0$error[] = "second error!!!";PHPChina 开源社区门户B-|&I"Zd,h_o
echo $error[0];
Fcz;ydI+a9Gu e0echo $error[1];PHPChina 开源社区门户\/Q V"})z]WWc
---------------------输出结果----------------------------------------
$b7wv9Zb0no error!!!second error!!!PHPChina 开源社区门户$s6PZ"Sa%Sd'X?
---------------------------------------------------------------------PHPChina 开源社区门户:{2j]A!k
2.关联数组PHPChina 开源社区门户e0M3h2y`Tx9L
关联数组(associative array)使用字符串索引(或键)来访问存储在数组中的值PHPChina 开源社区门户 [5R*K)X!s$X {
关联索引的数组对于数据库层交互非常有用PHPChina 开源社区门户Z T"O r;c`c@*^
$newarray = array("first"=>1,"second"=>2,"third"=>3);PHPChina 开源社区门户OO(s\?
echo $newarray["second"];PHPChina 开源社区门户C3t \p1t B t0HC*\
$newarray["third"]=5;
G_ `Jw[6w?C0echo $newarray["third"];
c8b'B"ncCiQw0---------------------输出结果----------------------------------------
@4[kVv1Z.rP025PHPChina 开源社区门户(ca0S8Lo+q#G.|
---------------------------------------------------------------------PHPChina 开源社区门户3{,hkr$L(r)ryl OW
3.异构数组PHPChina 开源社区门户~4D@9Y2YY~o
PHP数组可以包含不同种类的值
^)Zm_Ha5Af0$mixedBag = array("cat",42,8.5,false);PHPChina 开源社区门户8K/z @8p W2W
var_dump(mixedBag);PHPChina 开源社区门户sIC;?s._%W}]j
4.多维数组
hlF3Z7@4Z;M0创建包含数组的数组,数组维数没有限制,但是一般很难想象一个多于三维的数组的用法PHPChina 开源社区门户d"cT#` F\,]
$planets = array(array("MM",1,2),array("NN",3,4),array("BB",5,6),array("VV",7,8));PHPChina 开源社区门户]7|4p3{I r*x3Z*Ze"nT
print $planets[2][0];
V\n l"XyZL8r5w~Y8S0$planets2 = array("MM"=>array("AA"=>1,"SS"=>2),PHPChina 开源社区门户^9w#T5u}_9`/Z7y
"NN"=>array("DD"=>3,"FF"=>4),
SMu*W+H+f0"BB"=>array("GG"=>6,"HH"=>7,"PP"=>array("haha!!!!")),
[w"A_ rD+q5f0"VV"=>array("JJ"=>6,"KK"=>7,"LL"=>array("one","two")));PHPChina 开源社区门户OYB#}7T1H:oA3]
print $planets2["VV"]["LL"][0];
A+L3Cr1e7BZ&j'E]K0---------------------输出结果----------------------------------------
*KET%tw c$~Fx0BBonePHPChina 开源社区门户{T7_@ Uq ]
---------------------------------------------------------------------PHPChina 开源社区门户 u9ez^Z KTS
5.使用循环访问数组PHPChina 开源社区门户(K/N5VaP.W5HG
遍历数组的方法有很多(使用while,for循环)或者foreach语句,最容易的是foreach 语句PHPChina 开源社区门户^Z:asl Mq2w
$length = array(0,107,202,400,475);PHPChina 开源社区门户c[fyAh!b)A3N
//将厘米转换为寸PHPChina 开源社区门户 wE,i~$NCfCr
for($i=0;$i<5;$i++)PHPChina 开源社区门户+RH#X tjv
{
;I;Sf}i|_O0echo ($length[$i]/3);
1o,AeN;c AMm z0}
!\;m KhME p+K0$j=0;
xC2wB8OM0N@0while(isset($length[$j]))PHPChina 开源社区门户Fr'oc m1_]F0J
{
gF7U5QE4Vp'Z*Y;X$Rl{0echo ($length[$j]/3);PHPChina 开源社区门户8_F9E3rx%G@"m
$j++;PHPChina 开源社区门户:i6~ j zcT,KK
}PHPChina 开源社区门户V3few+jXB;?
foreach($length as $cm)
vd/N$}"w8@0{
x7Kt2mH(c0echo ($cm/3);
L3HFsdC2j0}
:e3E ` p^ta$Z2fX0---------------------输出结果----------------------------------------PHPChina 开源社区门户\*N NkP)j9I
0
y{I$^U4o t035.6666666667
C!itTs-g067.3333333333PHPChina 开源社区门户[@L,N0C+VX.mq
133.333333333PHPChina 开源社区门户.paEi'q.}0N bl
158.333333333PHPChina 开源社区门户#m}UR SM
0PHPChina 开源社区门户7y{t ME9a
35.6666666667
0nj!bD.|u#d067.3333333333PHPChina 开源社区门户6HR#G;F'PA%p(m"T
133.333333333PHPChina 开源社区门户)L)cUu'@9SQ
158.333333333
p:^%T/`3AC3j00PHPChina 开源社区门户_$H1vvU/V*KN6?
35.6666666667PHPChina 开源社区门户 }-g,I2fP
67.3333333333PHPChina 开源社区门户(Od(nOhRCJ oRn p
133.333333333PHPChina 开源社区门户T5N/L r`,j
158.333333333
6_"r4Y/]7[8t Qybq)a0PHPChina 开源社区门户-o$Ro&nSh{-J:w m
---------------------------------------------------------------------
$x(?9HH6`1Ke\0foreach还可以迭代关联数组的值
x%Q a!PR4] m%p}0$sound = array("cow"=>"moo","dog"=>"woof",
2i!Rh4Br0Q+@rM0"pig"=>"oink","duck"=>"quack");
uU!}C7~)J&oK.L#NR0foreach ($sound as $animal=>$noice)
?8q v4xaOT0{
~W]4k&m-K~\0echo "$animal 得叫声是这样的 $noice $noice......";PHPChina 开源社区门户q F I/{)A%q[x|9E
}PHPChina 开源社区门户fje#N5d
---------------------输出结果----------------------------------------PHPChina 开源社区门户eR8wZ(Fa
cow 的叫声是这样的 moo moo......PHPChina 开源社区门户,d5r|fB(TE7p
dog 的叫声是这样的 woof woof......
5isdP N0pig 的叫声是这样的 oink oink......
,R g{S(wh I+Nv0duck 的叫声是这样的 quack quack......
i xXp.IV2U*y0
q&^9PB QB0---------------------------------------------------------------------PHPChina 开源社区门户5V vq5Stu#`*Y
PHPChina 开源社区门户;vHhX)F)n
6.使用数组指针PHPChina 开源社区门户)AP/{"qe
与存储在数组中的键和关联值一起,PHP还拥有一个指向数组当前元素的内部索引,
5QpHH gO'Tn)\0有几个函数使用并更新该数组索引来提供对数组元素的访问PHPChina 开源社区门户)IugQT.IT(uG
$a = array("a","b","c","d","e","f");
(x zU i7~ |:l |O*|0echo current($a);PHPChina 开源社区门户e$E\,P Cf3sn\ `
each($a);PHPChina 开源社区门户T;j'B4Tp_
key($a);//目前数组的指针,返回其索引
:rhdy@8ZY E9l0echo current($a);//当前元素的值PHPChina 开源社区门户4\ DzDQ b@y%?A
each($a);//返回当前元素的值并将内部索引指向下一个元素
@$f#X&OLLC`$k7hmr0each($a);
TYtut){"ypB.U0echo current($a);PHPChina 开源社区门户1H\\6`V
next($a);//指向下一个元素
/nZ kT4b1~?I0echo current($a);PHPChina 开源社区门户'm8c%D0x| xNLb3z{
prev($a);//指向上一个元素
N5]!gZ:i/s0echo current($a);PHPChina 开源社区门户 w rXr%Q$d2G
end($a);//指向最后一个元素
tp U[!p!MAK0echo current($a);
W*d6^} O+}.X0key($a);PHPChina 开源社区门户 FW_6}J
echo current($a);PHPChina 开源社区门户/I,}^'_h2t
---------------------输出结果----------------------------------------PHPChina 开源社区门户S d9p!AY9U C1F7W
abdedff
1_3W7mud1_T!D0---------------------------------------------------------------------PHPChina 开源社区门户KLO:q+N$Em
7.基本的数组函数PHPChina 开源社区门户V y7BK9BaYuX v
integer count(mixed var)//在数组中返回元素的个数,也可用于任何的变量PHPChina 开源社区门户a8TW g3hA
number max(array numbers)//返回数组中的最大值
)jn b"lqn p"J0number min(array numbers)//返回数组中的最小值
b(B(uTFx0boolean in_array(mixed needle,array haystack[,bollean strict])//查找数组中的值,第三个参数可选,强制执行类型检查PHPChina 开源社区门户K\dJt7r/`Ez
mixed array_search(mixed needle,array haystack[,boolean strict])//返回 键 而不是布尔值,PHPChina 开源社区门户5s:Q j!^1E,PMWO
找不到时返回false,找到的元素如果正好是第一个元素,则返回0,而PHP会自动转化为false所以需要使用===判断,如下
3xY,l G;^I#}:| i0$a = array("a","b","c","d","e","f");PHPChina 开源社区门户[;e|o}3X%Hz
$index = array_search("a",$a);PHPChina 开源社区门户 M4^yC7PPs"m7C]'x
if($index === false)
)R g*k@V7IGc0echo "在数组a中未发现字符'a'";
3nIi7f@"Qe+t Q0elsePHPChina 开源社区门户RVg8f(I
echo "Index = $index";
$]?$JXQn7H0---------------------输出结果----------------------------------------
Y2R,Swk%xZ0Index = 0PHPChina 开源社区门户 LEEF7S?J+d B'c!m;X
---------------------------------------------------------------------
#u[(@ V7a Sm.r c9V0array array_reverse(array source[,bool preserve_keys])//逆转数组,生成一个新数组,可选参数为true时,保留索引和元素之间的关联PHPChina 开源社区门户Kg,@!r&hz
$a = array("a","b","c","d","e","f");PHPChina 开源社区门户B\7wBV
$newa = array_reverse($a);//直接翻转PHPChina 开源社区门户a,t3F D,OQ,ok
echo $newa[0];PHPChina 开源社区门户o R:CE)W
$newb = array_reverse($a,true);//依旧保留了索引和元素之间的关联
Z6D7\n'D0echo $newb[0];PHPChina 开源社区门户8Knd e F]8g2K
---------------------输出结果----------------------------------------
N&nWI7~9K&d9jJ0faPHPChina 开源社区门户$GBr"c~@1S:SzK
---------------------------------------------------------------------PHPChina 开源社区门户nZ(V4Xu)X^i
sort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素)PHPChina 开源社区门户/V m'T7X5A7s M X`P x
rsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素)
tI\0~-`0n%wN[#G2z0可选参数可以指定为按数字方式SORT_NUMERIC还是字符串方式SORT_STRING或者通常的方式SORT_REGULAR排序PHPChina 开源社区门户D&L;rD,MP
sort()、rsort()可以用于关联数组,但是 键 将丢失
Q_ Eg:V L sfN t0asort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素),保持键值关联
,U HE.Eq"Z3xf7C)b%b0arsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素),保持键值关联
^X?(W5I~3ghB U0当asort() arsort()用于非关联数组时,元素按排序后的次序重新排列,但是访问元素的索引不改变PHPChina 开源社区门户-I8Z8V#W u8C"q
integer ksort(ayyay subject [,integer sort_flag])//根据 键或索引 进行升序排列PHPChina 开源社区门户.w s"yhX
integer krsort(ayyay subject [,integer sort_flag])//根据 键或索引 进行降序排列PHPChina 开源社区门户sXFN"x;Qd
usort(array subject, string compare_function)//根据用户定义排序,用户定义自己的排序规则函数,但函数必须符合
]L5RV5iY$Vz%`0uasort(array subject, string compare_function)//integer my_compare_function(mixed a, mixed b),a>b返回1,a uksort(array subject, string compare_function)//a等于b时返回0PHPChina 开源社区门户1m"ZwZ[2^!g.Y%kc)` N
$numbers = array(16,3,2,171,5,24,6,19);
o+j.j] Kx8l(Y |F;z Y0sort($numbers);PHPChina 开源社区门户6VVO~` } ~U
foreach($numbers as $n)
.X2[%xn"p0echo $n." ";
`/Z(Q ~U[0$numbers = array(16,3,2,171,5,24,6,19);PHPChina 开源社区门户/wy@A`J
rsort($numbers);
_,Y7nj&B"j3B0foreach($numbers as $n)
I,]/v4\ A0echo $n." ";PHPChina 开源社区门户2q9nkV J7t"u[u
$numbers = array(16,3,2,171,5,24,6,19);
A V(r)o+Y0sort($numbers,SORT_STRING);PHPChina 开源社区门户G9w1Z0aT;cu*rf
foreach($numbers as $n)
:C1p5P/d:J e0z!Ni)N&Z0echo $n." ";
mH]#~b,w9e0
z(Aw8T+cI0$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");
B#gh:a*e2hH} IU0asort($a);PHPChina 开源社区门户;z/[_ba[&VI
foreach ($a as $keyname=>$keyvalue)PHPChina 开源社区门户#V[A8K ^2v9zfS`
echo $keyvalue;PHPChina 开源社区门户v/` Y+XK_ v\
PHPChina 开源社区门户}Q&? `M|5Q:q~
$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");PHPChina 开源社区门户Z{G_#r(e;[kA
ksort($a);PHPChina 开源社区门户)cn7zPGhe/`$a2^2vx
foreach ($a as $keyname=>$keyvalue)
HHbJO$]%j3G0echo $keyvalue;
vr$n@ l"V]0PHPChina 开源社区门户/i K;dV!Q4xs
//基于长度比较两个字符串
%["^#n zFd0function cmp_length($a,$b)
T3yZ0p[i5NJ0{PHPChina 开源社区门户{*J$yB!q%`U3x
if(strlen($a) < strlen($b))
3v!v4xiXgQ:I)o R0return -1;
dN(Fx'{,t0if(strlen($a) > strlen($b))
eM&L`XC%Z7DD{0return 1;
^s)A#_;w!F0return 0;PHPChina 开源社区门户g@!@*`kRq
}PHPChina 开源社区门户1pa*F$M:r
$animals = array("cow","ox","monkey","mimi");
apx-aG_!p0usort($animals,"cmp_length");
'qaM[Wh0foreach($animals as $an)PHPChina 开源社区门户;@r4n;O@ Sb!c
echo $an;
B].lY6A#Mx ]&HM0---------------------输出结果----------------------------------------
.b j _8F$`kh9k02 3 5 6 16 19 24 171 171 24 19 16 6 5 3 2 16 171 19 2 24 3 5 6 hhkkrrzzrrzzkkhhoxcowmimimonkeyPHPChina 开源社区门户UAE6e.A`
---------------------------------------------------------------------PHPChina 开源社区门户9u;|zj|0cR4z
array_merge($a,$b)//组合数组,个人认为是比较有趣的函数之一,从两个数组生成一个数组,具有相同 键 的值会被覆盖PHPChina 开源社区门户R+a&pX r~
////////////////////////////代码部分////////////////////////////////////////
kN(jN\.h:p Y4Le0kT0$a = array("name"=>"zhangsan",10,100);
r7JA G:X5Qof,s0$b = array("name"=>"lisi",4,6,8);PHPChina 开源社区门户,o s;e+G2Xh.W-j
$c = array_merge($a,$b);
S} ZyB"_$bX0var_dump($c);PHPChina 开源社区门户T4CM Ts7w
//////////////////////////////////////////////////////////////////////////PHPChina 开源社区门户%c%F2x2N!v&h
---------------------输出结果----------------------------------------PHPChina 开源社区门户3r w6GS7s;_
array(6) { ["name"]=> string(4) "lisi" [0]=> int(10) [1]=> int(100) [2]=> int(4) [3]=> int(6) [4]=> int(8) }PHPChina 开源社区门户P*_2m(^+b7~$A7n w-dh0V
---------------------------------------------------------------------PHPChina 开源社区门户%R%ot&I(Hb
array array_combine(array $a,array $b)//a数组的值为新数组的键,b数组的值为新数组的值,数组长度不同时,返回falsePHPChina 开源社区门户Ij1s"ZY
////////////////////////////代码部分////////////////////////////////////////
!R(^9Ej'C!H0$a = array("name","math","china");PHPChina 开源社区门户,d!x8iz8aVu}"k]
$b = array("zhangsan",4,6);PHPChina 开源社区门户n8I g)H5Y@]7d
$c = array_combine($a,$b);PHPChina 开源社区门户@#d#Rfzd/{5g
var_dump($c);
-j ]4wgj0//////////////////////////////////////////////////////////////////////////PHPChina 开源社区门户H{"l4f$i:J t"I4k
---------------------输出结果----------------------------------------PHPChina 开源社区门户iy'mtmT!E+`ai
array(3) { ["name"]=> string(8) "zhangsan" ["math"]=> int(4) ["china"]=> int(6) }
Y(f3|6eBg;X0---------------------------------------------------------------------PHPChina 开源社区门户!? F,]sv

TAG:

引用 删除 申坤   /   2007-08-22 00:16:30
BB的,不错
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 27874
  • 日志数: 99
  • 图片数: 1
  • 建立时间: 2006-10-25
  • 更新时间: 2007-02-06

RSS订阅

Open Toolbar