【PHP学习】数组

多维数组

书上这块只是略微提了下,我这里再补充下:
二维数组标准例子

$families = array ( "Griffin"=>array ( "Peter", "Lois", "Megan" ),
"Quagmire"=>array ( "Glenn" ), "Brown"=>array ( "Cleveland", "Loretta",
"Junior" ) );

输出结果

Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
) 

若显示

echo "Is " . $families['Griffin'][2] ." a part of the Griffin family?"; 

则输出

Is Megan a part of the Griffin family? 

这样一个例子,摘自W3C菜鸟教程,其实很清楚了。

1.array()创建数组
array array([item1 [,item2,...,[,itemN]]])
2.list()提取数组
void list(mixed...)

例如要提取以下格式化的信息:

Sanzi|professional golfer|green
<?php
$file = fopen ( "users.txt", "r" );
while ( $line = fgets ( $file, 4096 ) ) {
    list ( $name, $occupation, $color ) = explode ( "|", $line );//用explode()分离数据片段
    printf ( "Name: %s<br />", $name );
    printf ( "Occupation: %s<br />", $occupation );
    printf ( "Favourite: %s<br />", $color );
}
fclose ( $file );
?>
range()填充数组
array range(int low,int high [,int step])

例如指定一个数组包含1~20之间所有偶数,则

$seven=range(0,20,2);

其中step为步长,从low~high是范围。
range()函数还可以用于字符序列。

测试数组
boolean is_array(mixed variable)
输出数组

这里就介绍vprintf()函数,是用来输出“数组的数组”的,将格式化的结果发送到一个字符串,可以使用vprintf()函数。

<?php
$customers = array ();
$customers [] = array (
        "Jason Gilmore",
        "jason@example.com",
        "614-999-9999" 
);
$customers [] = array (
        "Jesse James",
        "jesse@example.net",
        "818-999-9999" 
);
$customers [] = array (
        "Donald Duck",
        "donald@example.org",
        "212-999-9999" 
);
foreach ( $customers as $customer ) {
    vprintf ( "<p>Name:%s<br />E-mail:%s<br />Phone:%s<br /></p>", $customer );
}
?>

添加和删除数组元素

PHP为了模拟C语言中队列和栈的操作,开发出了一套函数,专门用来对数组进行添加和删除

1.数组头部添加元素
int array_unshift(array array,mixed variable [,mixed variable...])
2.数组尾部添加元素
int array_push(array array,mixed variable [,mixed variable...])
3.从数组头部删除元素
mixed array_shift(array array)
4.从数组尾部删除元素
mixed array_pop(array array)

定位数组元素

1.搜索数组
boolean in_array(mixed needle,array haystack [,boolean strict])

第三个参数可选,它强制in_array()在搜索时考虑类型。

boolean array_key_exists(mixed key,array array)

如果在一个数组中找到一个指定的键,函数则返回TRUE,否则返回FALSE。

2.搜索关联数组值
mixed array_search(mixed needle,array haystack [,boolean strict])

在一个数组中搜索一个指定的值,如果找到则返回相应的键,否则返回FALSE。

3.获取数组键
array array_keys(array array [,mixed search_value[,boolean preserve_keys]])

如果包含可选参数,则只会返回与该值匹配的键。

4.获取数组值
array array_values(array array)

返回一个数组中的所有值,并自动为返回的数组提供数值索引。

遍历数组

1.获取当前数组键
mixed key(array array)

注意:每次调用key()时不会移动指针,为此就需要使用next()函数完成推进指针的任务。

2.获取当前数组值
mixed current(array array)
3.获取当前数组键和值
array each(array array)
4.数组指针移动

①将指针移动到下一个数组位置

mixed next(array array)

②将指针移动到前一个数组位置

mixed prev(array array)

③将指针移到第一个数组位置

mixed reset(array array)

④将指针移动到最后一个数组位置

mixed end(array array)
5.向函数传递数组值
boolean array_walk(array &array,callback function [,mixed userdata])

这里不太懂……

确定数组的大小和唯一性

1.确定数组的大小
integer count(array array [, int mode])

如果启用了mode参数(设置为1),则数组将进行递归计数,这个在统计多维数组中所有元素的个数时这个特性很有用。

$location=array("Italy","Amsterdam",array("Boston","Des Moines"),"Miami");
echo count($locations,1);

将返回6,因为不光这个数组的内容分别统计为一个元素,而且这个数组实体本身也被统计为一个元素。

2.统计数组元素出现的频度
array array_count_values(array array)

3.确定唯一的数组元素

array array_unique(array,array[,int sort_flags=SORT_STRING])

可选参数可以确定如何对数组值排序,默认会值会被作为字符串进行排序。

数组排序

1.逆置数组元素顺序
array array_reverse(array array [, boolean preserve_keys]) 

当preserve_keys设置为TRUE时,保持键映射,否则重新摆放后的各个值将对应于先前该位置上的相应键。

2.置换数组键和值
array array_flip(array array)
3.数组排序
void sort(array array [, int sort_flags])

sort()函数不返回排序后的数组,不论结果如何都不返回任何值。
sort_flags参数可选,SORT_NUMERIC按数值排序,SORT_REGULAR按照相应的ASCII值对元素排序,SORT_STRING按接近于人所认知的正确顺序对元素排序。
asort()函数和sort()相同,以升序对数组排序,只不过它将保持键/值的关联

void asort(array array [, integer sort_flags])

rsort()是以相反顺序对数组元素排序

void rsort(array array [,int sort_flags])

同样,arsort()保持键/值关联,但是以逆序对数组进行排序

void arsort(array array [, int sort_flags])

natsort()函数提供了一种相当于人们平常使用的排序机制

void natsort(array array)

natcasesort()不区分大小写

void natcasesort(array array)

ksort()函数按键对数组排序,如果成功则返回TRUE,否则返回FALSE

integer ksort(array array [, int sort_flags])

krsort()函数以逆序排序

intergr krsort(array array [, int sort_flags])

usort()可以使用在该函数中制动的用户自定义比较算法对数组排序。

void usort(array array,callback function_name)

这块可能理解起来不太好理解,但是多看几遍书应该没问题
合并、拆分、接合和分解数组

array_merge()函数将数组合并到一起,返回一个联合的函数。

array array_merge(array array1,array array2 [,array arrayN])

array_merge_recursive()函数递归追加数组,它与array_merge最大的区别就在于当某个输入数组中的某个键已经存在于结果数组中时,该函数会把两个值合并在一起,形成一个新数组并以原有的键作为数组名

array array_merge_recursive(array array1,array array2 [,array arrayN])

array_combine()函数会生成一个新数组,两个输入数组必须大小相同,不能为空。

array array_combine(array keys,array values)

array_slice()函数从键offset开始到offset+length位置结束

array array_slice(array array,int offset [,length [, boolean preserve_keys]])

如果offset为负值,则从距数组末尾offset位置开始拆分。如果length给出并且为负数,则在距数组开头的count(input_array)-|length|位置结束。
array_splice()函数会删除数组中从offset到offset+length结束的所有元素,并以数组形式返回所删除的元素

array array_splice(array array, int offset [,int length [, array replacement]])

其offset值的正负和array_slice()函数一致,不过,如果忽略length,则从offset位置开始到数组结束之间的全部元素都将被删除。

array_intersect()函数返回了一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。

array array_intersect(array array1,array array2 [,array arrayN])

注意:只有当两个元素具有相同数据类型的时候才认为相等
array_intersect_assoc()基本相同,只不过它还考虑了数组的键。因此,只有在第一数组中出现,而且在其他输入数组中也出现的键/值对才被返回到结果数组中。

array array_intersect_assoc(array array1,array array2 [,arrayN])

array_diff()返回出现在第一个数组中但其他输入数组中没有的值。(差集)

array array_diff(array array1,array array2 [,arrayN])

array_diff_assoc()多考虑了数组的键。

array array_diff_assoc(array array1,array array2 [,arrayN])

其他有用的数组函数

1.返回一组随机的键
mixed array_rand(array array [, int num_entries])
2.随机洗牌数组元素
void shuffle(array input_array)

array_sum()将input_array中的所有值加在一起,返回最终的和,如果包含其他数据类型,这些值将会被忽略。

mixed array_sum(array array)

array_chunk()函数将input_array分解成一个多维数组,这个多维数组由多个包含size个元素的数组所组成。

array array_chunk(array array,int size [,boolean preserve_keys])

以上就是PH数组部分,很快地过了一遍,很多函数还没记住机制和作用,但是这张开始就明显感觉进度慢下来而且深入了,所以以后的学习还会更加难……加油!PS:前面的内容需要补充的我打了记号,应该会在后面提到或者回过头来再改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值