php程序设计慕课版读书笔记,PHP程序设计读书笔记十之数组

本文详细讲解了PHP数组的索引数组与关联数组的区别,以及如何高效地访问、存储和操作数组。涉及初始化、多维数组、遍历方法、函数如array_slice、array_sort等,是PHP开发者必备的数组操作指南。
摘要由CSDN通过智能技术生成

数组:

1.索引数组和关联数组

索引数组的键名是整数并且从0开始。

关联数组的键名是字符串,看起来像有两个列的数据表:第一列是用于访问键值的键名,第二列是键值

在两种情况下,键都是唯一的,不能为同一个数组中的两个或多个元素使用相同的键。

2.数组元素的访问

我们可以使用数组变量的名字后跟括在中括号中的元素键(也称作索引)来访问数组中的特定的值。$arr[index];

键可以是一个字符串或一个整数。等价于整数(但不以0开头)的字符串值被当作整数对待。也就是说:$arr[3]等价于$arr['3'],但是都不等价于$arr['03']

使用带引号的键是很好的PHP风格,因为没有引号的键不能和常量区别开来。当你把一个常量当做无引号的索引使用时,PHP会把常量的值当作索引使用。

也就是说:

define('index',5);

echo $array[index];//将输出$array[5],而不是$array['index']

如果要在键名中使用变量替换来建立数组索引,必须使用双引号,才能进行变量解析。$age["Clone$number"]

如果要通过变量替换得到某个数组元素,则键名不要使用引号,否则会出错。

print "Hello, $person[name]";//正确

print "Hello, $person['name']";//错误

3.在数组中存储数据(初始化)

如果数组不存在,那么向数组存放值将创建该数组,但在一个未定义的数组中检索值不会创建数组。

初始化索引数组:$arr = array('a','b','c');//索引值(从0开始)是自动创建的

也可以使用:$arr = array(1 => 'Monday','Tuesday','Wednesday');后面元素的键值将会在第一个指定键值得基础上依次递增。

初始化关联数组(使用=>来分隔索引和值):$arr = array('a' => 'aaa',

'b' => 'bbb',

'c' => 'ccc');

也可以使用:$arr = array('Friday' => 'Black','Brown','Green');这条语句等价于$arr = array('Friday' => 'Black',0 => 'Brown',1 => 'Green');

初始化一个空数组:$arr = array();

4.在数组末尾添加值

语法:$arr[] = 'Pebbles';

这种方式假设该数组的索引是数字,并且把元素分配给下一个可用的数字索引,数字索引从0开始。

利用这种语法给关联数组添加值是程序员常犯的错误。

5.指定值的范围

range()函数创建一个连续整数或字符的数组,整数或字符的值在传递给函数的两个参数之间。

$num = range(2,5);//$num = array(2,3,4,5);

$letter = array('a','z');//保存字母表到数组中

字符串参数中只有第一个字母被用于限定范围:range('aaa','zzz');等价于range('a','z');

6.获得数组的大小

count()和sizeof()函数

7.填充数组

用重复的内容来创建一个数组,可以使用array_pad()函数。

$arr2 = array_pad($arr1,$num,$init);

第一个参数是要操作的数组,

第二个参数是你想要数组拥有的最少元素个数

第三个参数是要给每个元素的初始值

返回值:填充后的数组,丢弃它的源数组。(重新分配空间创建新数组,并释放源数组的空间)

$score = array(5,10);

$padded = array_pad($score,5,0);//$padded为{5,10,0,0,0}

如果想要把新值增加到数组的开头,可以把第二个参数设置为负数

如果不想在新开辟的空间创建数组,可以:$score = array_pad($score,5,0);

如果你填充元素到一个关联数组,已经存在的键将被保留。新的元素将使用从0开始的数字键。

8.多维数组

数组中的值也可以是数组,这样可以来创建多维数组:

$row1 = array(1,2,3);

$row2 = array(4,5,6);

$row3 = array(7,8,9);

$multi = array($row1,$row2,$row3);

可以通过添加更多的[]来引用多维数组中的元素:

$value = $multi[2][0]

要使用变量替换来访问多维数组中的元素,必须将整个元素用大括号括起来:

echo "The value at row 2,column 0 is {$multi[2][0]}n";

9.析取多个值

要把一个数组的所有值都复制到变量中,可以使用list结构

list($var1,$var2,...) = $array;

数组的值将按数组的内部顺序被复制到列出的变量中。在默认情况下这个顺序就是他们被插入的顺序。

$person = array('Fred',35,'Betty');

list($name,$age,$wife) = $person;//$name为Fred,$age为35,$wife为Betty

如果数组中的元素个数比list()中的变量多,则多余的值就被忽略

如果list()中的值比数组中的多,则多余的值就被设为NULL

在list()中用两个或多个连续的逗号来跳过数组中的值:

$value = range('a','e');

list($m,,$n,,$o) = $value;//$m为'a',$n为'c',$o为'e'

10.切割数组

要析取数组的一个子集,可以使用array_slice()函数:

$subset = array_slice(array,offset,length);

返回值为由原始数组中的连续元素组成的新数组,新数组有从0开始的数字键。

第二个参数:要复制的初始元素

第三个参数:要复制的值个数。

可以使用array_slice()来进行数组切割的只有是索引数组才有意义。

11.把一个大数组划分成一个多维的小数组,可以使用array_chunk()函数:

$chunk = array_chunk(array,size[,preserve_key]);

第三个参数:是一个布尔值,它指定新数组的元素是否有和原数组相同的键(用于关联数组)还是重新分配的从0开始的数字键(用于索引数组)。默认为分配新的键

12.得到一个仅由数组中的键组成的数组:

$array_of_keys = array_keys(array);

得到一个仅由数组中的值组成的数组

$array_of_values = array_values(array);

13.检查元素是否存在

array_key_exists()函数:$array_key_exists(key,array);//返回一个布尔值,如果array数组中存在名为key的有效键,则返回true,否则返回false

if($array['name']){...}//简单的这样判断是不够的,因为当name键的值为0,NULL或空字符串时,这个条件语句也为false

14.在数组中插入和删除元素

array_splice()函数可以在数组中删除或插入元素,并且可以用被删除的元素创建另一个数组

$removed = array_splice(array,start[,length[,replacement]]);//如果省略length参数,array_splice()将删除到数组末尾

要在元素被删除的位置插入元素,应该使用第四个参数指定,而且替换数组的元素个数不需要和被删除的元素数目相同。

该函数也可用于关联数组

15.在数组和变量间转换

1.从数组创建变量:

extract()函数自动从一个数组创建局部变量,数组元素的键名就是变量名

如果一个从数组提取生成的变量和一个已存在的变量有相同的名字,提取生成的变量将覆盖已存在的变量。

可以通过第二个参数来修改extract()的行为,其中最有用的是EXTR_PREFIX_ALL,它指定extract()的第三个参数为要创建变量名的前缀,这可以帮助使用extract()函数时创建唯一的变量名

2.从变量创建数组

将多个变量名或单个数组作为参数传递给compact()可合并出一个数组。compact()函数创建一个关联数组,它的键是变量名并且值为变量的值。

在数组中任何和实际变量不符合的名字都被跳过。

16.数组的遍历

方式一:foreach结构,foreach结构并没有操作数组本身,而是操作数组的一份拷贝,在foreach循环体中插入或删除元素是安全的

方式二:迭代器:指向当前元素的指针被称为迭代器,相关函数:current();返回迭代器当前指向的元素;reset();移动迭代器到数组的第一个元素并返回该元素

next()移动迭代器到数组的下一个元素并返回该元素;prev()移动迭代器到数组的上一个元素并返回该元素;end();移动迭代器到数组的最后一个元素并返回该元素

each();以数组的形式返回当前元素的键和值,并移动迭代器到数组的下一个元素;key()返回当前元素的键

each()函数用于遍历数组元素,但是这种方法并没有像foreach()那样产生数组的一个拷贝。处理大数组时想要节约内存,可以采用这种方法

17.为数组的每个元素调用函数:array_walk(array,function_name[,param3]);自定义的函数可选的接收2个或三个参数:第一个参数是元素的值,第二个参数是元素的键,第三个是该函数被array_walk()调用时使用的值

18.查找元素值in_array(to_find,array[,strict])函数,如果第一个参数是在第二个参数指定的数组中的元素,则返回true,否则返回false

如果第三个参数是true,那么to_find的数据类型必须和数组的值相匹配。默认为false

使用in_array()函数比使用循环检查数组的每个值来寻找一个值要快得多。

in_array()函数的变种函数:array_search()函数,该函数的返回值为找到元素的键

19.排序

按值排序数组,然后从0开始重新分配索引:升序:sort(),降序:rsort(),用户自定义顺序:usort()

按值排序:升序:asort(),降序:arsort(),用户自定义顺序:uasort()

按键排序:升序:ksort(),降序:krsort(),用户自定义顺序:uksort()

按自然顺序排序(0,1,2,3,4,5,...):natsort($array);

20.翻转数组

array_reverse()函数翻转数组中的元素的内部顺序,数字索引从0开始重新编号,字符串索引则不受影响;

array_flip()函数返回数组,它翻转了每个元素的键-值对的顺序(键值互换)

21.计算数组和

array_sum()函数合计一个索引数组或关联数组中的值

22.合并两个数组

array_merge(array1,array2[,...])

如果和前一个数组的一个数字索引重复,那么后一个数组的值被分配给一个新的数字索引

如果和前一个数组的一个字符串键重复,那么之前的值被后面的值代替

23.比较两个数组的不同

array_diff()函数用于识别在一个数组中出现而不在其他数组中出现的值

$diff = array(array1,array2[,...]);

第一个数组的索引将被保留

24.从数组中筛选元素

要从数组中根据元素值来确定一个子集,可使用array_filter()函数

$filtered = array_filter(array,callback);

array的每个值被传递给命名为callback的函数。返回的数组只包含使函数返回true值的原始数组的元素

25.数组的高级用法

集合

求集合的并集:

function array_union($a,$b){

$union = array_merge($a,$b);

$union = array_unique($union);

return $union;

}

求集合的交集:

array_intersect();接收任意个数组作为参数,并且返回在每个数组中都存在的值的数组。如果有多个键有相同的值,保存值的第一个键。

求集合的差集:

array_diff()函数

堆栈

array_push()和array_pop()表示入栈和出栈

array_shift()和array_unshift()函数把数组作为队列对待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值