作者:ian | 来源:互联网 | 2014-06-17 17:22
php中数组是一个特殊的数据类型,可以说是对象也可说是存储器了, 他里面可以存储php中其它数据类型的内容,如一个数组中可以有字符型,数字型,对象等等,下面我先来学习一下php数组的定义与遍历查找吧。
① 创建数组第一种方法
$arr[0]=123;
$arr[1]=90;
….
概念:
[0] -> 这个我们称为下标,或者称为 关键字
$arr[0] -> 这个称为数组的一个元素.
$arr[0]=123; 123 表示该$arr[0]元素对应的值
$arr –》这个是该数组的名称.
?在php数组中,元素存放的值可以是任意数据数据类型
② 创建数组的第二种方法
基本语法
$数组名=array(值1,值2,.......);
举例说明:
$arr=array(1,90,"helllo",89.5);
③ 第三种方式创建数组(在默认情况下,我们的元素的下标,是从0开始给你编号,但是实际上,也可以自己指定)
基本语法$arr[‘logo’]=”北京”;
$arr[’hsp’]=123
....
或者
$arr=array(”logo”=>”北京”,”hsp”=>123,4=>678);
数组的遍历方法:
注: 如果使用 for while do..while 要确定该数组的下标是从 0开始顺序排放
数组共有多少个元素,可以使用系统函数count,代码如下:
for循环遍历方法
- for($i=0;$i<count($arr);$i++){
- echo &#39;
&#39;.$arr[$i];
- }
-
- $i=0;
- while($i<count($colors)){
- echo "
".$colors[$i];
- $i++;
- }
-
- $i=0;
- do{
- echo "
".$colors[$i];
- $i++;
- }while($i<count($colors));
-
这个foreach适用范围更广
- foreach($arr as $key=>$val){
- echo $key."=".$val."
";
- }
php的数组相关的函数
① count 函数
基本用法是
count($数组名); 可以统计该数组共有多少元素.
② is_array
③ print_r 和 var_dump
④ explode 对字符串进行分割
案例:
- ?$str="浙江&台州&杭州";
-
- $arr=explode("&",$str);
- print_r($arr);
数组查找
实例代码如下:
- $arr_a = array(0 => "a", 1 => "b", 2 => "c");
- $key = array_search("a", $arr_a);
- if( $key !== FALSE ){
- echo "键名为:$key";
- } else {
- echo &#39;无匹配结果&#39;;
- }
- ?>
-
-
array_key_exists()函数
如果在一个数组中找到一个指定的键,函数array_key_exists()返回true,否则返回false。其形式如下:
boolean array_key_exists(mixed key,array array);
下面的例子将在数组键中搜索apple,如果找到,将输出这个水果的颜色,代码如下:
- $fruit["apple"] = "red";
- $fruit["banana"] = "yellow";
- $fruit["pear"] = "green";
- if(array_key_exists("apple", $fruit)){
- printf("apple&#39;s color is %s",$fruit["apple"]);
- }
-
-
合并数组
array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:
array array_merge (array array1 array2…,arrayN)
这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引,代码如下:
- $fruits = array("apple","banana","pear");
- $numbered = array("1","2","3");
- $cards = array_merge($fruits, $numbered);
- print_r($cards);
-
-
- ?>
2.追加数组
array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并在一起,形成一个联合的数组.两者之间的区别在于,当某个输入数组中的某个键己经存在于结果数组中时该函数会采取不同的处理方式.array_merge()会覆盖前面存在的键/值对,替换为当前输入数组中的键/值对,而array_merge_recursive()将把两个值合并在一起,形成一个新的数组,并以原有的键作为数组名。还有一个数组合并的形式,就是递归追加数组,其形式为:
array array_merge_recursive(array array1,array array2[…,array arrayN])
程序实例代码如下:
- $fruit1 = array("apple" => "red", "banana" => "yellow");
- $fruit2 = array("pear" => "yellow", "apple" => "green");
- $result = array_merge_recursive($fruit1, $fruit2);
- print_r($result);
-
-
- ?>
现在键 apple 指向一个数组,这个数组由两个颜色值组成的索引数组。
3. 连接数组
array_combine()函数会得到一个新数组,它由一组提交的键和对应的值组成。其形式为:
array array_combine(array keys,array values)
注意,两个输入数组必须大小相同,不能为空,示例代码如下:
- $name = array("apple", "banana", "orange");
- $color = array("red", "yellow", "orange");
- $fruit = array_combine($name, $color);
- print_r($fruit);
-
-
- ?>
4. 拆分数组 array_slice()
array_slice()函数将返回数组中的一部分,从键offset开始,到offset+length位置结束。其形式:
array array_slice (array array, int offset[,int length])
offset 为正值时,拆分将从距数组开头的offset 位置开始;如果offset 为负值,则拆分从距数组末尾的offset 位置开始。如果省略了可选参数length,则拆分将从offset 开始,一直到数组的最后一个元素,如果给出了length 且为正数,则会在距数组开头的offset+length 位置结束,相反,如果给出了length且为负数,则在距数组开头的count(input_array)-|length|位置结束,考虑一个例子,代码如下:
- $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
- $subset = array_slice($fruits, 3);
- print_r($subset);
-
-
- ?>
数组排序(下面方法用于一维数组)
•sort() 函数用于对数组单元从低到高进行排序。
•rsort() 函数用于对数组单元从高到低进行排序。
•asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
•arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
•ksort() 函数用于对数组单元按照键名从低到高进行排序。
•krsort() 函数用于对数组单元按照键名从高到低进行排序。
多维数组排序,比如有个多为数组,代码如下:
- $arr = array(
- ‘d’ => array(‘id’ => 5, ‘name’ => 1, ‘age’ => 7),
- ‘b’ => array(‘id’ => 2,’name’ => 3,’age’ => 4),
- ‘a’ => array(‘id’ => 8,’name’ => 10,’age’ => 5),
- ‘c’ => array(‘id’ => 1,’name’ => 2,’age’ => 2)
- );
需要对二维数组中的 age 项排序。
需要用到PHP的内置函数 array_multisort(),可以看手册。
自定义函数,代码如下:
- function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){
- if(is_array($multi_array)){
- foreach ($multi_array as $row_array){
- if(is_array($row_array)){
- $key_array[] = $row_array[$sort_key];
- }else{
- return false;
- }
- }
- }else{
- return false;
- }
- array_multisort($key_array,$sort,$multi_array);
- return $multi_array;
- }
-
- echo “”;
- print_r(multi_array_sort($arr,’age’));exit;
-
- Array
- (
- [c] => Array
- (
- [id] => 1
- [name] => 2
- [age] => 2
- )
- [b] => Array
- (
- [id] => 2
- [name] => 3
- [age] => 4
- )
- [a] => Array
- (
- [id] => 8
- [name] => 10
- [age] => 5
- )
- [d] => Array
- (
- [id] => 5
- [name] => 1
- [age] => 7
- )
- )