|
关于数组:<BR><U><STRONG> HP</STRONG></U>中的数组是复杂的,并且比许多其他高级语言中的数组更灵活。<BR>数组array是一组有序的变量,其中每个变量被叫做一个元素。<BR>数组可以被编号或者相关联,也就是数组的元素可以分别根据数字索引或文本化字符串来访问<BR> HP中,数组可以包含标量(整数,布尔,字符串,浮点数)或复合值(<U><STRONG>对象</STRONG></U>甚至其他数组),并且可以包含不同类型的值<BR>1。创建数组<BR> HP提供创建数组的array()语言结构<BR>$numbers = array(5,4,3,2,1);<BR>$words = array("web","database","application");<BR>echo $numbers[2];<BR>echo $words[0];<BR>---------------------输出结果----------------------------------------<BR>3web<BR>---------------------------------------------------------------------<BR>默认情况下,数组的第一个元素的索引为0。数组中包含的值可以通过使用方括号[]语法来检索和修改<BR>$numbers[5] = 0;<BR>数字化索引的数组可以创建位从任何索引值开始<BR>$numbers = array(1=>"one","two","three","four");<BR>也可以松散的索引<BR>$numbers = array(1=>"one",3=>"three",5=>"zero");<BR>可以通过给变量赋予一个没有参数的array()来创建空数组。然后可以通过使用方括号[]语法来添加值<BR>$error = array();<BR>$error[] = "no error!!!";<BR>$error[] = "second error!!!";<BR>echo $error[0];<BR>echo $error[1];<BR>---------------------输出结果----------------------------------------<BR>no error!!!second error!!!<BR>---------------------------------------------------------------------<BR>2.关联数组<BR>关联数组(associative array)使用字符串索引(或键)来访问存储在数组中的值<BR>关联索引的数组对于<U><STRONG>数据库</STRONG></U>层交互非常有用<BR>$newarray = array("first"=>1,"second"=>2,"third"=>3);<BR>echo $newarray["second"];<BR>$newarray["third"]=5;<BR>echo $newarray["third"];<BR>---------------------输出结果----------------------------------------<BR>25<BR>---------------------------------------------------------------------<BR>3.异构数组<BR> HP数组可以包含不同种类的值<BR>$mixedBag = array("cat",42,8.5,false);<BR>var_dump(mixedBag);<BR>4.多维数组<BR>创建包含数组的数组,数组维数没有限制,但是一般很难想象一个多于三维的数组的用法<BR>$planets = array(array("MM",1,2),array("NN",3,4),array("BB",5,6),array("VV",7,8));<BR>print $planets[2][0];<BR>$planets2 = array("MM"=>array("AA"=>1,"SS"=>2),<BR>"NN"=>array("DD"=>3,"FF"=>4),<BR>"BB"=>array("GG"=>6,"HH"=>7," P"=>array("haha!!!!")),<BR>"VV"=>array("JJ"=>6,"KK"=>7,"LL"=>array("one","two")));<BR>print $planets2["VV"]["LL"][0];<BR>---------------------输出结果----------------------------------------<BR>BBone<BR>---------------------------------------------------------------------<BR>5.使用循环访问数组<BR>遍历数组的方法有很多(使用while,for循环)或者foreach语句,最容易的是foreach 语句<BR>$length = array(0,107,202,400,475);<BR>//将厘米转换为寸<BR>for($i=0;$i<5;$i++)<BR>{<BR>echo ($length[$i]/3);<BR>}<BR>$j=0;<BR>while(isset($length[$j]))<BR>{<BR>echo ($length[$j]/3);<BR>$j++;<BR>}<BR>foreach($length as $cm)<BR>{<BR>echo ($cm/3);<BR>}<BR>---------------------输出结果----------------------------------------<BR>0<BR>35.6666666667<BR>67.3333333333<BR>133.333333333<BR>158.333333333<BR>0<BR>35.6666666667<BR>67.3333333333<BR>133.333333333<BR>158.333333333<BR>0<BR>35.6666666667<BR>67.3333333333<BR>133.333333333<BR>158.333333333<BR><BR>---------------------------------------------------------------------<BR>foreach还可以迭代关联数组的值<BR>$sound = array("cow"=>"moo","dog"=>"woof",<BR>"pig"=>"oink","duck"=>"quack");<BR>foreach ($sound as $animal=>$noice)<BR>{<BR>echo "$animal 得叫声是这样的 $noice $noice......";<BR>}<BR>---------------------输出结果----------------------------------------<BR>cow 的叫声是这样的 moo moo......<BR>dog 的叫声是这样的 woof woof......<BR>pig 的叫声是这样的 oink oink......<BR>duck 的叫声是这样的 quack quack......<BR><BR>---------------------------------------------------------------------<BR><BR>6.使用数组指针<BR>与存储在数组中的键和关联值一起,PHP还拥有一个指向数组当前元素的内部索引,<BR>有几个函数使用并更新该数组索引来提供对数组元素的访问<BR>$a = array("a","b","c","d","e","f");<BR>echo current($a);<BR>each($a);<BR>key($a);//目前数组的指针,返回其索引<BR>echo current($a);//当前元素的值<BR>each($a);//返回当前元素的值并将内部索引指向下一个元素<BR>each($a);<BR>echo current($a);<BR>next($a);//指向下一个元素<BR>echo current($a);<BR>prev($a);//指向上一个元素<BR>echo current($a);<BR>end($a);//指向最后一个元素<BR>echo current($a);<BR>key($a);<BR>echo current($a);<BR>---------------------输出结果----------------------------------------<BR>abdedff<BR>---------------------------------------------------------------------<BR>7.基本的数组函数<BR>integer count(mixed var)//在数组中返回元素的个数,也可用于任何的变量<BR>number max(array numbers)//返回数组中的最大值<BR>number min(array numbers)//返回数组中的最小值<BR>boolean in_array(mixed needle,array haystack[,bollean strict])//查找数组中的值,第三个参数可选,强制执行类型检查<BR>mixed array_search(mixed needle,array haystack[,boolean strict])//返回 键 而不是布尔值,<BR>找不到时返回false,找到的元素如果正好是第一个元素,则返回0,而PHP会自动转化为false所以需要使用===判断,如下<BR>$a = array("a","b","c","d","e","f");<BR>$index = array_search("a",$a);<BR>if($index === false)<BR>echo "在数组a中未发现字符'a'";<BR>else<BR>echo "Index = $index";<BR>---------------------输出结果----------------------------------------<BR>Index = 0<BR>---------------------------------------------------------------------<BR>array array_reverse(array source[,bool preserve_keys])//逆转数组,生成一个新数组,可选参数为true时,保留索引和元素之间的关联<BR>$a = array("a","b","c","d","e","f");<BR>$newa = array_reverse($a);//直接翻转<BR>echo $newa[0];<BR>$newb = array_reverse($a,true);//依旧保留了索引和元素之间的关联<BR>echo $newb[0];<BR>---------------------输出结果----------------------------------------<BR>fa<BR>---------------------------------------------------------------------<BR>sort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素)<BR>rsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素)<BR>可选参数可以指定为按数字方式SORT_NUMERIC还是字符串方式SORT_STRING或者通常的方式SORT_REGULAR排序<BR>sort()、rsort()可以用于关联数组,但是 键 将丢失<BR>asort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素),保持键值关联<BR>arsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素),保持键值关联<BR>当asort() arsort()用于非关联数组时,元素按排序后的次序重新排列,但是访问元素的索引不改变<BR>integer ksort(ayyay subject [,integer sort_flag])//根据 键或索引 进行升序排列<BR>integer krsort(ayyay subject [,integer sort_flag])//根据 键或索引 进行降序排列<BR>usort(array subject, string compare_function)//根据用户定义排序,用户定义自己的排序规则函数,但函数必须符合<BR>uasort(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时返回0<BR>$numbers = array(16,3,2,171,5,24,6,19);<BR>sort($numbers);<BR>foreach($numbers as $n)<BR>echo $n." ";<BR>$numbers = array(16,3,2,171,5,24,6,19);<BR>rsort($numbers);<BR>foreach($numbers as $n)<BR>echo $n." ";<BR>$numbers = array(16,3,2,171,5,24,6,19);<BR>sort($numbers,SORT_STRING);<BR>foreach($numbers as $n)<BR>echo $n." ";<BR><BR>$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");<BR>asort($a);<BR>foreach ($a as $keyname=>$keyvalue)<BR>echo $keyvalue;<BR><BR>$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");<BR>ksort($a);<BR>foreach ($a as $keyname=>$keyvalue)<BR>echo $keyvalue;<BR><BR>//基于长度比较两个字符串<BR>function cmp_length($a,$b)<BR>{<BR>if(strlen($a) < strlen($b))<BR>return -1;<BR>if(strlen($a) > strlen($b))<BR>return 1;<BR>return 0;<BR>}<BR>$animals = array("cow","ox","monkey","mimi");<BR>usort($animals,"cmp_length");<BR>foreach($animals as $an)<BR>echo $an;<BR>---------------------输出结果----------------------------------------<BR>2 3 5 6 16 19 24 171 171 24 19 16 6 5 3 2 16 171 19 2 24 3 5 6 hhkkrrzzrrzzkkhhoxcowmimimonkey<BR>---------------------------------------------------------------------<BR>array_merge($a,$b)//组合数组,个人认为是比较有趣的函数之一,从两个数组生成一个数组,具有相同 键 的值会被覆盖<BR>////////////////////////////代码部分////////////////////////////////////////<BR>$a = array("name"=>"zhangsan",10,100);<BR>$b = array("name"=>"lisi",4,6,8);<BR>$c = array_merge($a,$b);<BR>var_dump($c);<BR>//////////////////////////////////////////////////////////////////////////<BR>---------------------输出结果----------------------------------------<BR>array(6) { ["name"]=> string(4) "lisi" [0]=> int(10) [1]=> int(100) [2]=> int(4) [3]=> int(6) [4]=> int(8) } <BR>---------------------------------------------------------------------<BR>array array_combine(array $a,array $b)//a数组的值为新数组的键,b数组的值为新数组的值,数组长度不同时,返回false<BR>////////////////////////////代码部分////////////////////////////////////////<BR>$a = array("name","math","china");<BR>$b = array("zhangsan",4,6);<BR>$c = array_combine($a,$b);<BR>var_dump($c);<BR>//////////////////////////////////////////////////////////////////////////<BR>---------------------输出结果----------------------------------------<BR>array(3) { ["name"]=> string(8) "zhangsan" ["math"]=> int(4) ["china"]=> int(6) } <BR>---------------------------------------------------------------------<BR><BR> |
|