1,数组的定义和初始化
什么是数组?数组是一种编程结构,它是一个存储一组或一系列数值的变量。
比如人口普查时对个人的身份登记,如姓名、性别、民族、出生等就可作为数组。
PHP中创建数组使用array()结构来定义,比如:
$people=array(‘name’,’sex’,’nation’,’brith’);
而如何显示数组中的各元素的值,我们则是使用从0开始的索引,索引号在变量名称后的方括号中,比如:
<?php $people=array(‘name’,'sex’,'nation’,'birth’); echo $people[2]; ?>
输出的$people[2]就是显示的是nation(索引第一项从0计数)。
PHP除了支持数字索引数组以外,还支持相关数组。所谓相关数组,就是可自定义关键字来替换不直观的数字索引,比如:
<?php $peoples=array(‘xm’=>’name’,'xb’=>’sex’,'mz’=>’nation’,'cs’=>’birth’); echo $peoples['cs']; ?>
使用相关数组使得输出的选择很直观(不需要预先计算索引号然后输出),定义的关键字和值之间使用“=>”符号定义。
根据PHP数组元素的两种显示方式,还可以如变量一样无需array()声明和初始化,直接自动创建数字。比如
$people[0]=’name’; $people[1]=’sex’; $people[2]=’nation’; $people[3]=’brith’; 或者 $peoples['xm']=’name’; $peoples['xb']=’sex’; $peoples['mz']=’nation’; $peoples['cs']=’birth’;
该数组的大小根据所增加元素的多少动态的变化。
2,数组元素的显示
在如上使用的无论$people[2]也好,无论$peoples[‘cs’]也好,都只是输出已知的明确位置的数组元素值,如何快速输出所有或部分的数组元素,使用循环语句无疑是最快的方法。
<?php $people=array(‘name’,'sex’,'nation’,'birth’); for ($i=0;$i<4;$i++) echo "$people[$i] "; ?>
除了使用了解循环次数的for循环以外,还可以使用对循环次数无须要求的foreach语句。
<?php $people=array(‘name’,'sex’,'nation’,'birth’); foreach($people as $xiangmu) echo $xiangmu; ?>
$xiangmu变量将保存数组中的各元素值,依次显示出来。当然,为了输出的数据能间隔区分,可在数组元素之后输出空格:
echo $xiangmu.” “;
假如您有很大的一个数组,而所要完成的仅是找出一个存在的给定值,您能够使用in_array()以返回true 或 false。如下代码将输出“Not found in this array”――因为您将在$namesArray中寻找一个并不存在的“Alber ”。
<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John"); $lookingFor = "Albert"; if (in_array($lookingFor, $namesArray)) { echo "You’ve found it!"; } else { echo "Not found in this array!"; } ?>
假如您改变了$lookingFor的值,将其变为“Mary”,您将得到消息“You’ve found it!”――因为“Mary”是$namesArray的一部分。
假如希望对数组元素计数,您能够使用count()函数:
<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John"); $count = count($namesArray); ?>
$count值将为7。
您能够对任何数组添加元素,无论是在已存在数组的开始或末尾。您也能够使用函数以创建一个包含两个或多个数组元素的新数组。合并时每个数组将按需要的顺序排列。假如您的数组已有内部的排序,您需要对新的合并数组重排序。
让我们从对已存在数组的末尾增添元素开始,使用函数array_push():
<? /* 创建原始数组 */ $fruitArray = array("apple", "orange", "banana", "kiwi", "pear"); /* 加入到原始数组中 */ array_push($fruitArray, "grape", "pineapple", "tomato"); /* 通过其键值列出每个元素*/ while (list($key,$value) = each($fruitArray)) { echo "$key : $value<br>"; } ?>
这将显示:
0 : apple 1 : orange 2 : banana 3 : kiwi 4 : pear 5 : grape 6 : pineapple 7 : tomato
当您需要对数组开头添加元素时,代码很类似。不同处只是函数名:array_unshift() 而不是array_push()。
<? /* 创建原始数组 */ $fruitArray = array("apple", "orange", "banana", "kiwi", "pear"); /* 加入到原始数组中 */ array_unshift($fruitArray, "grape", "pineapple", "tomato"); /* 通过其键值列出每个元素*/ while (list($key,$value) = each($fruitArray)) { echo "$key : $value<br>"; } ?>
这将显示:
0 : grape 1 : pineapple 2 : tomato 3 : apple 4 : orange 5 : banana 6 : kiwi 7 : pear
函数array_merge()合并两个或更多的数组。
<? /* 创建原始数组 */ $fruitArray = array("apple", "orange", "banana", "kiwi", "pear"); <? /* 创建第二个数组 */ $vegArray = array("carrot", "green beans", "asparagus", "artichoke", "corn"); /* 合并为一个数组 */ $goodfoodArray = array_merge($fruitArray, $vegArray); /* 通过其键值列出每个元素*/ while (list($key,$value) = each($goodfoodArray)) { echo "$key : $value<br>"; } ?>
这将显示:
0 : apple 1 : orange 2 : banana 3 : kiwi 4 : pear 5 : carrot 6 : green beans 7 : asparagus 8 : artichoke 9 : corn
现在已对数组进行了增加元素和合并,现在来练习删除元素函数。您能够使用函数array_pop()从一数组末尾删除一个元素。假如使用函数 array_shift(),则从一数组开头删除一个元素。而实际上当您从数组删除元素时,此元素对您而言仍然可用――当您从已存在的数组中对元素进行 pop 或 shift时。
使用array_pop()函数从数组末尾删除一个值:
<? /* 创建一数组*/ $fruitArray = array("apple", "orange", "banana", "kiwi", "pear"); /* 在末尾弹出某值 */ $popped = array_pop($fruitArray); /* 列出新数组内容,连同弹出的值*/ while (list($key,$value) = each($fruitArray)) { echo "$key : $value<br>"; } echo "<br>and finally, in $popped: $popped"; ?>
这将显示:
0 : apple 1 : orange 2 : banana 3 : kiwi and finally, in $popped: pear
下面,从数组末尾删除某值:
<? /* 创建一数组*/ $fruitArray = array("apple", "orange", "banana", "kiwi", "pear"); /* 从数组头部移出某值 */ $shifted = array_shift($fruitArray); /* 列出新数组的内容连同移出的值*/ while (list($key,$value) = each($fruitArray)) { echo "$key : $value<br>"; } echo "<br>and finally, in $shifted: $shifted"; ?>
这将显示:
0 : orange 1 : banana 2 : kiwi 3 : pear and finally, in $shifted: apple
有很多函数能够帮助您对数组元素排序。但我将会演示基本的排序以帮助您了解其过程:
<? /* 创建原始数组 */ $fruitArray = array("apple", "orange", "banana", "kiwi", "pear"); /* 排序 */ sort($fruitArray); /* 对其重设以正确从头到尾显示数组 */ /* 通过其键值列出每个元素*/ while (list($key,$value) = each($fruitArray)) { echo "$key : $value<br>"; } ?>
7.php中基本的数组函数
integer count(mixed var)//在数组中返回元素的个数,也可用于任何的变量
number max(array numbers)//返回数组中的最大值
number min(array numbers)//返回数组中的最小值
boolean in_array(mixed needle,array haystack[,bollean strict])//查找数组中的值,第三个参数可选,强制执行类型检查
mixed array_search(mixed needle,array haystack[,boolean strict])//返回 键 而不是布尔值,
找不到时返回false,找到的元素如果正好是第一个元素,则返回0,而PHP会自动转化为false所以需要使用===判断,
举例:
$a = array("a","b","c","d","e","f"); $index = array_search("a",$a); if($index === false) echo "在数组a中未发现字符’a'"; else echo "Index = $index"; 输出结果 Index = 0
array array_reverse(array source[,bool preserve_keys])//逆转数组,生成一个新数组,可选参数为true时,保留索引和元素之间的关联
举例:
$a = array("a","b","c","d","e","f"); $newa = array_reverse($a);//直接翻转 echo $newa[0]; $newb = array_reverse($a,true);//依旧保留了索引和元素之间的关联 echo $newb[0]; 输出结果 fa
sort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素)
rsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素)
可选参数可以指定为按数字方式SORT_NUMERIC还是字符串方式SORT_STRING或者通常的方式SORT_REGULAR排序
sort()、rsort()可以用于关联数组,但是 键 将丢失
asort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素),保持键值关联
arsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素),保持键值关联
当asort() arsort()用于非关联数组时,元素按排序后的次序重新排列,但是访问元素的索引不改变
integer ksort(ayyay subject [,integer sort_flag])//根据 键或索引 进行升序排列
integer krsort(ayyay subject [,integer sort_flag])//根据 键或索引 进行降序排列
usort(array subject, string compare_function)//根据用户定义排序,用户定义自己的排序规则函数,但函数必须符合
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
$numbers = array(16,3,2,171,5,24,6,19); sort($numbers); foreach($numbers as $n) echo $n." "; $numbers = array(16,3,2,171,5,24,6,19); rsort($numbers); foreach($numbers as $n) echo $n." "; $numbers = array(16,3,2,171,5,24,6,19); sort($numbers,SORT_STRING); foreach($numbers as $n) echo $n." "; $a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr"); asort($a); foreach ($a as $keyname=>$keyvalue) echo $keyvalue; $a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr"); ksort($a); foreach ($a as $keyname=>$keyvalue) echo $keyvalue; //基于长度比较两个字符串 function cmp_length($a,$b) { if(strlen($a) < strlen($b)) return -1; if(strlen($a) > strlen($b)) return 1; return 0; } $animals = array("cow","ox","monkey","mimi"); usort($animals,"cmp_length"); foreach($animals as $an) echo $an; 输出结果 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
array_merge($a,$b)//组合数组,个人认为是比较有趣的函数之一,从两个数组生成一个数组,具有相同 键 的值会被覆盖
$a = array("name"=>"zhangsan",10,100); $b = array("name"=>"lisi",4,6,8); $c = array_merge($a,$b); var_dump($c); 输出结果 array(6) { ["name"]=> string(4) "lisi" [0]=> int(10) [1]=> int(100) [2]=> int(4) [3]=> int(6) [4]=> int(8) }
array array_combine(array $a,array $b)//a数组的值为新数组的键,b数组的值为新数组的值,数组长度不同时,返回false
$a = array("name","math","china"); $b = array("zhangsan",4,6); $c = array_combine($a,$b); var_dump($c); 输出结果 array(3) { ["name"]=> string(8) "zhangsan" ["math"]=> int(4) ["china"]=> int(6) }