«
PHP编程中数组的基础知识

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  关于数组:</p><p>  PHP中的数组是复杂的,并且比许多其他高级语言中的数组更灵活。</p><p>  数组array是一组有序的变量,其中每个变量被叫做一个元素。</p><p>  数组可以被编号或者相关联,也就是数组的元素可以分别根据数字索引或文本化字符串来访问</p><p>  PHP中,数组可以包含标量(整数,布尔,字符串,浮点数)或复合值(对象甚至其他数组),并且可以包含不同类型的值</p><p>  1。创建数组</p><p>  PHP提供创建数组的array()语言结构</p><code>$numbers = array(5,4,3,2,1);<br />$words = array("web","database","application");<br />echo $numbers[2];<br />echo $words[0];</code></p><p>  ---------------------输出结果----------------------------------------</p><p>  3web</p><p>  ---------------------------------------------------------------------</p><p>  默认情况下,数组的第一个元素的索引为0。数组中包含的值可以通过使用方括号[]语法来检索和修改</p><p>  $numbers[5] = 0;</p><p>  数字化索引的数组可以创建位从任何索引值开始</p><p>  $numbers = array(1=>"one","two","three","four");</p><p>  也可以松散的索引</p><p>  $numbers = array(1=>"one",3=>"three",5=>"zero");</p><p>  可以通过给变量赋予一个没有参数的array()来创建空数组。然后可以通过使用方括号[]语法来添加值</p><code>$error = array();<br />$error[] = "no error!!!";<br />$error[] = "second error!!!";<br />echo $error[0];<br />echo $error[1];</code></p><p>  ---------------------输出结果----------------------------------------</p>
<p> </p>

   <p>  no error!!!second error!!!</p><p>  ---------------------------------------------------------------------</p><p>  2.关联数组</p><p>  关联数组(associative array)使用字符串索引(或键)来访问存储在数组中的值</p><p>  关联索引的数组对于数据库层交互非常有用</p><code>$newarray = array("first"=>1,"second"=>2,"third"=>3);<br />echo $newarray["second"];<br />$newarray["third"]=5;<br />echo $newarray["third"];</code></p><p>  ---------------------输出结果----------------------------------------</p><p>  25</p><p>  ---------------------------------------------------------------------</p><p>  3.异构数组</p><p>  PHP数组可以包含不同种类的值</p><p>  $mixedBag = array("cat",42,8.5,false);</p><p>  var_dump(mixedBag);</p><p>  4.多维数组</p><p>  创建包含数组的数组,数组维数没有限制,但是一般很难想象一个多于三维的数组的用法</p><code>$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,"PP"=>array("haha!!!!")),<br />"VV"=>array("JJ"=>6,"KK"=>7,"LL"=>array("one","two")));<br />print $planets2["VV"]["LL"][0];</code></p>
 <p> </p>

   <p>  ---------------------输出结果----------------------------------------</p><p>  BBone</p><p>  ---------------------------------------------------------------------</p><p>  5.使用循环访问数组</p><p>  遍历数组的方法有很多(使用while,for循环)或者foreach语句,最容易的是foreach 语句</p><code>$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 />}</code></p><p>  ---------------------输出结果----------------------------------------</p><code>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</code></p><p>  ---------------------------------------------------------------------</p><code>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 />}</code></p><p>  ---------------------输出结果----------------------------------------</p><code>cow 的叫声是这样的 moo moo......<br />dog 的叫声是这样的 woof woof......<br />pig 的叫声是这样的 oink oink......<br />duck 的叫声是这样的 quack quack......</code></p>
 <p> </p>

   <p>  ---------------------------------------------------------------------</p><p>  6.使用数组指针</p><p>  与存储在数组中的键和关联值一起,PHP还拥有一个指向数组当前元素的内部索引,</p><p>  有几个函数使用并更新该数组索引来提供对数组元素的访问</p><code>$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);</code></p><p>  ---------------------输出结果----------------------------------------</p><p>  abdedff</p><p>  ---------------------------------------------------------------------</p><p>  7.基本的数组函数</p><code>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 />$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");<br />asort($a);<br />foreach ($a as $keyname=>$keyvalue)<br />echo $keyvalue;<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 />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 />---------------------------------------------------------------------</code></p>