您的位置:首页 > 编程语言 > PHP开发

PHP数组使用、特性、函数的总结

2012-06-01 10:24 633 查看
包含其他数组的数组成为多维数组

关联数组(即非数字索引数组)使用更有意义的数据作为数组的索引

1、数组索引数组

$products  =  array( 'a',  'b',  'c');//就像一个对象一样初始化


数组的复制:$arra = $arrb;//即可将数组arrb的内容复制到数组arra中

使用range可以将一个范围的值,直接放到一个数组中返回,比如:
$numbers = range(1,10);

$letters = range('a', 'z');

range具有第三个参数,是间隔的意思,比如要用1到10之间的奇数数组:
$odds = range(1,10,2);

数组具有的一些功能:

如果信息存放在磁盘文件中,可以直接将文件载入到数组中

如果数组中的数据存放在数据库中,可以直接从数据库载入该数组

可以使用函数每次提取数组的一部分内容,或者对数组进行重新排序

PHP的数组不需要预先初始化或创建,第一次使用,会自动创建

如果数组arra有2个元素,那么语句arra[2] = 'a';将会自动添加一个新元素

对数组的foreach访问

foreach($arra as $c){
echo $c." ";
}


2、使用不同索引的关联数组

关联数组,可以将每个变量值和任何关键字或者索引联系起来

关联数组的初始化:
$price  =  array('Tires'=>100,  'oil'=>10,  'Spark'=>4);

3、使用foreach对关联数组进行遍历

foreach每次将数组内容,放到一个键值对里面进行访问:

foreach($price as $key=>$value){
echo $key." - ".$value."<br />";
}


结果:

测试关联数组--------------
Tires - 100
oil - 10
Spark – 4

4、使用while + each()结构访问关联数组

每次将一个键值对作为整体返回,类似pair(key,  value):

while($elem = each($price)){
echo $elem['key']." - ".$elem['value']."<br />";
}


结果是一样的。

5、访问关联数组值list()和each()搭配进行(高级用法)

reset($price);//

貌似遍历了因此数组,数组指针就变成了最后一个,所以要重置一下
echo "<br>使用list()+each()遍历数组:<br>";
while(list($product, $pri) = each($price)){
echo $product." - ".$pri."<br />";
}

注意:each()函数,数组将记录当前元素,如果希望两次以上使用该数组,就必须用reset()函数将当前元素重新设置到数组开始的地方

6、数组操作符

主要是+,即联合操作符,解释如下:
+,例如$arra+$arrb,两个数组的联合,数组arrb会被附加到arra中,但是任何关键字冲突的元素不会被添加

7、数字索引数组升序排序

bool sort ( array
&$array
[, int
$sort_flags
= SORT_REGULAR ] )

第二个参数:

SORT_REGULAR
- 默认

SORT_NUMERIC
- 作为数字比较

SORT_STRING
- 作为字符串比较

8、关联数组升序排序

分为两种:

按照关键字排序,即按照$key的内容排序

bool ksort ( array
&$array
[, int
$sort_flags
= SORT_REGULAR ] )


按照值排序,即按照$value排序

bool asort ( array
&$array
[, int
$sort_flags
= SORT_REGULAR ] )

其中第二个参数和sor是相同的

9、对数组的降序排序

sort、ksort、asort都是对数组进行升序排序的

rsort、krsort、arsort是对数组进行降序排序,但是用法相同

10、使用回调函数对多维数组进行排序

如下一个排序:

echo "<br>使用回调函数对多维数组排序:<br>";
$products = array(
array('TIR', 'Tires', 100),
array('OIL', 'Oil',10),
array('SPK', 'Spark Plugs', 4)
);

//以下是回调函数,两个参数是数组的一维元素
function compare($x, $y){
if($x[1] == $y[1]){
return 0;
} else if($x[1] < $y[1]){
return -1;
} else
return 1;
}

usort($products, 'compare');//传入函数的名字


usor中的u代表用户,因为要求用户传入比较函数,同样的,有uasort和uksort函数

多维数组的排序,如果要进行反向排序,只要将回调函数的返回值取反就行了,比如

usrot($products,  'reverse_compare');

11、对数组进行重新排序

bool shuffle ( array
&$array
)   //该函数将一个数组随机打乱

array_reverse 返回原数组的反序副本,不会改变原数组。
array array_reverse ( array
$array
[, bool
$preserve_keys
= false ] )

12、array_push和array_pop

int array_push ( array
&$array
,
mixed
$var
[,
mixed
$...
] )

向数组末尾添加元素,例如代码:
array_push($stack, "apple", "raspberry");

另一个是array_pop
mixed array_pop ( array
&$array
) //array_pop() 弹出并返回末尾元素


<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
?>


结果(和栈一样,末尾元素被删除):

Array ( [0] => orange [1] => banana [2] => apple )

13、explode将字符串拆分成数组

array explode ( string
$delimiter
, string
$string
[, int
$limit
] )

第三个参数若被设置,则只返回前最多limit个元素

<?php
$str = 'one|two|three|four';

// positive limit
print_r(explode('|', $str, 2));

// negative limit (since PHP 5.1)
print_r(explode('|', $str, -1));
?>


结果:

Array ( [0] => one [1] => two|three|four )

Array ( [0] => one [1] => two [2] => three )

14、PHP的其他数组函数

在数组中浏览的函数:

数组中都有一个内部指针,用来遍历数组,该指针可以被使用和改变,比如each()就是使用该指针的

each():返回当前元素,然后前移指针

current()

reset():将指针指向数组开头

end():将指针指向数组末尾

next():前移指针,然后返回元素,和each()相反

pos()

prev():前移指针,然后返回元素,与next()相反

15、超级强大:对数组一个元素使用任何回调函数:array_walk()

bool array_walk ( array
&$array
, callable
$funcname
[,
mixed
$userdata
=
NULL
] )

注意,该函数是不管数组指针指向哪里,它就是从头到位开始遍历

如果第三个参数被设置,我们可以在自己的回调函数中,使用该参数

回调函数的形式如下:
myfunc(  value,  key,  userdata);//

一般来说,funcname有2个参数,第一个是value,第二个是key,可以忽略key和userdata,只带1个参数即value

echo "<br>使用array_walk对每个元素应用一个函数:<br>";
$arrint = array(1,2,3,4,5,6);
echo "原数组:<br>";
printArr($arrint);
//注意第一个参数,因为要改变,所以用引用
function myfunc(&$val, $key, $count){
$val *= $count;
}
array_walk($arrint, myfunc, 3);//每个元素乘以3
echo "使用了array_walk以后的数组:<br>";
printArr($arrint);


结果:

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)

使用了array_walk以后的数组:
Array
(
[0] => 3
[1] => 6
[2] => 9
[3] => 12
[4] => 15
[5] => 18
)

16、统计数组元素个数:count()、sizeof()和array_count_values()

sizeof()和count()的返回值相同

array_count_values用法不同,返回的是统计数目:

<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>

结果:


Array
(
[1] => 2
[hello] => 2
[world] => 1
)


17、将键值对的关联数组的每个元素建立一个变量extract()

int extract ( array
&$var_array
[, int
$extract_type
= EXTR_OVERWRITE [, string
$prefix
=
NULL
]] )

比如代码:

<?php

/* Suppose that $var_array is an array returned from wddx_deserialize */

$size = "large";
$var_array = array("color" => "blue",
"size"  => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_size\n";

?>


结果:
blue, large, sphere, medium

可以看出,意思是将键作为变量名,新建了变量,为了防止冲突,设定第二个和第三个参数,用于处理冲突,第三个参数指定新建变量的前缀。

18、小结

数组在PHP用的是超级多

本章主要对数组进行了概念定义、foreach,each,list的遍历方法、array_walk回调的使用、打乱、排序、抽取等各种数组操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: