高得帅的数组

                                                        第4章:数组

1、初始数组

数组构成:数组是由一个或多个数组元素组成的
数组元素:一每个数组元素由键(Key)和值(Value)构成
键:“键”为元素的识别名称,也被称为数组下标
值: “值”为元素的内容
映射: “键”和“值”之间存在一种对应关系,称之为映射
类型划分:根据键的数据类型,可以将数组划分为索引数组和关联数组,前者使用数字作为键,后者使用字符串作为键。

索引数组是指键名为整数的数组。默认情况下,索引数组的键名是从0开始,并依次递增。它主要适用于利用位置(0、1、2……)来标识数组元素的情况。另外,索引数组的键名也可以自己指定。

关联数组是指键名为字符串的数组。通常情况下,关联数组元素的“键”和“值”之间有一定的业务逻辑关系。因此,通常使用关联数组存储一系列具有逻辑关系的变量。关联数组的“键”都是字符串,并与“值”之间具有一一对应的关系。

2、数组的基本使用

array()语言结构中的数组元素使用“键=>值”的方式进行表示,各元素之间使用逗号进行分割。
$fruits = array(‘apple’, ‘grape’, ‘pear’); // 省略键名
s p o r t s = a r r a y ( 2 = > ′ b a s k e t b a l l ′ , 4 = > ′ s w i m m i n g ′ ) ; / / 指 定 键 名 数 组 在 省 略 键 名 的 设 置 时 , 默 认 从 0 开 始 , 依 次 递 增 加 1 , 因 此 该 数 组 元 素 的 键 名 依 次 为 “ 0 、 1 、 2 ” 。 除 此 之 外 , 还 可 以 根 据 实 际 需 求 自 定 义 数 组 元 素 的 键 名 , 如 上 述 示 例 中 的 sports = array(2 => 'basketball', 4 => 'swimming'); // 指定键名 数组在省略键名的设置时,默认从0开始,依次递增加1,因此该数组元素的键名依次为“0、1、2”。 除此之外,还可以根据实际需求自定义数组元素的键名,如上述示例中的 sports=array(2=>basketball,4=>swimming);//01012sports数组变量,将其第1个元素键名设置为2,第2个元素的键名设置为4

$info = array(‘id’ => 10, ‘name’ => ‘Tom’, ‘tel’ => 18810888188);
在定义关联数组时 “键”则有明确的数据类型要求,具体如下。
键只能是整型或字符串型的数据,如果是其他类型,则会执行类型自动转换
合法整型的字符串会被转为整型,如“2”转为2,而“02”则不会被转换
浮点数会被舍去小数部分直接转换成整型,如“2.6”转为2
布尔类型的true会被转为1,false转为0
NULL类型会被转为空字符串
若数组中存在相同键名的元素时,后面的元素会覆盖前面元素的值

在定义数组时,还可以定义没有任何元素的数组,以及既有索引表示方式、又有关联表示方式的数组元素。
$temp = array();
$mixed = array(2, ‘str’, ‘id’ => 5, 5 => ‘b’, ‘a’);
$mixed数组的元素“b”指定了数字键名为“5”
“b”元素后的“a”元素会自动将前面最大的数字键名加1后,作为其键名,即5+1得到键名6。

短数组定义法([])与array()语法结构相同,只需将array()替换为[]即可
// 相当于:array(‘wind’, ‘fine’)
$weather = [‘wind’, ‘fine’];
// 相当于:array(‘id’ => 12, ‘name’ => ‘PHP’)
$object = [‘id’ => 12, ‘name’ => ‘PHP’];
// 相当于:array(array(1, 3), array(2, 4))
$num = [[1, 3], [2, 4]];

数组定义完成后,若想要查看数组中某个具体的元素,则可以通过“数组名[键]”的方式获取。
另外,若要一次查看数组中的所有元素,则可以利用前面学习过的输出语句函数print_r()和var_dump(),并且通常情况下为了使输出的函数按照一定的格式打印,查看时经常与pre标记一起使用。

所谓遍历数组就是一次访问数组中所有元素的操作。通常情况下,使用foreach()语句完成数组的遍历。

不仅前面讲解的标量数据类型可以进行比较运算,数组这种复合数据类型也可以进行运算,不过数组有其专门提供的数组操作符进行对应的运算。在这里插入图片描述
“+”为联合运算符,用于合并数组,如果出现下标相同的元素,则保留第1个数组内的元素。
$num = [2, 4];
$alp = [‘a’, ‘b’, ‘c’];
$mer1 = $num + $alp;
$mer2 = $alp + n u m ; p r i n t r ( num; print_r( num;printr(mer1); // 输出结果:Array ( [0] => 2 [1] => 4 [2] => c )
print_r($mer2); // 输出结果:Array ( [0] => a [1] => b [2] => c )

3、数组查找

顺序查找法是最简单的查找法,只需按照数组中元素的保存顺序,利用待查的值与数组中的元素从前往后一个一个的进行比较,直到找到目标值或查找失败。

二分查找法:针对有序数组的一种查找法,它的查询效率非常高。
实现原理:每次将查找值与数组中间位置元素的值进行比较,相等返回;不等则排除掉数组中一半的元素,然后根据比较结果大或小,再与数组中剩余一半中间位置元素的值进行比较,以此类推,直到找到目标值或查找失败。
4、数组排序

冒泡排序:是计算机科学领域中较简单的排序算法。
实现原理:按照要求从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值,较小或较大的元素前移。冒泡排序比较的轮数是数组长度减1,每轮比较的对数等于数组的长度减当前的轮数。
缺点:冒泡排序的效率很低,在实际中使用较少。
在这里插入图片描述

快速排序:是对冒泡排序的一种优化。
实现原理:首先选择一个基准元素,通常选择待排序数组的第1个数组元素。通过一趟排序,将要排序的数组分成两个部分,其中一部分比基准元素小,另一部分比基准元素大,然后再利用同样的方法递归的排序划分出的两部分,直到将所有划分的数组排序完成。

插入排序:也是冒泡排序的优化,是一种直观的简单排序算法。
实现原理:通过构建有序数组元素的存储,对未排序数组的元素,在已排序的数组中从最后一个元素向第一个元素遍历,找到相应位置并插入。其中,待排序数组的第1个元素会被看作是一个有序的数组,从第2个至最后一个元素会被看作是一个无序数组。

5、数组的常用函数在这里插入图片描述

// 输出each()返回的数组
a r r = [ ′ s u b ′ = &gt; ′ P H P ′ ] ; e c h o ′ &lt; p r e &gt; ′ ; p r i n t r ( e a c h ( arr = [&#x27;sub&#x27; =&gt; &#x27;PHP&#x27;]; echo &#x27;&lt;pre&gt;&#x27;; print_r(each( arr=[sub=>PHP];echo<pre>;printr(each(arr));
echo ‘’;

// 输出结果
Array (
[1] => PHP
[value] => PHP
[0] => sub
[key] => sub
)
each()函数可以获取数组中当前元素的键和值,并以数组形式返回
each()函数的返回值中包含了4个数组元素,分别为关联形式和索引形式保存的键和值。

利用list()语言结构、each()函数以及while()循环可以对数组进行遍历。
s w e e t s = [ ′ M u f f i n ′ , ′ c o o k i e ′ , ′ c a k e ′ ] ; w h i l e ( l i s t ( sweets = [&#x27;Muffin&#x27;, &#x27;cookie&#x27;, &#x27;cake&#x27;]; while (list( sweets=[Muffin,cookie,cake];while(list(k, v ) = e a c h ( v) = each( v)=each(sweets)) {
c u r r = c u r r e n t ( curr = current( curr=current(sweets); // 此时指针已经被each()移动到了下一位
// 输出结果:0 => Muffin-cookie 1 => cookie-cake 2 => cake-
echo "{KaTeX parse error: Expected 'EOF', got '}' at position 2: k}̲ => {v}-{$curr} ";
}

list()结构可将给定数组中的元素依次赋值给list小括号内从左到右定义的变量。
each()函数在获取到了当前元素的键和值后,会自动将数组的指针指向下一个元素,直到没有数组元素时返回NULL。
函数名称 功能描述
array_pop() 将数组最后一个元素弹出(出栈)
array_push() 将一个或多个元素压入数组的末尾(入栈)
array_unshift() 在数组开头插入一个或多个元素
array_shift() 将数组开头的元素移出数组
array_unique() 移除数组中重复的值
array_slice() 从数组中截取部分数组
array_splice() 将数组中的一部分元素去掉并用其他值取代在这里插入图片描述

a r r = [ ′ p u f f ′ , ′ T i r a m i s u ′ ] ; a r r a y p o p ( arr = [&#x27;puff&#x27;, &#x27;Tiramisu&#x27;]; array_pop( arr=[puff,Tiramisu];arraypop(arr); // 移出数组最后一个元素
print_r( a r r ) ; / / 输 出 结 果 : A r r a y ( [ 0 ] = &gt; p u f f ) a r r a y p u s h ( arr); // 输出结果:Array ( [0] =&gt; puff ) array_push( arr);//Array([0]=>puff)arraypush(arr, ‘cookie’); // 在数组末尾添加元素
print_r( a r r ) ; / / 输 出 结 果 : A r r a y ( [ 0 ] = &gt; p u f f [ 1 ] = &gt; c o o k i e ) a r r a y u n s h i f t ( arr); // 输出结果:Array ( [0] =&gt; puff [1] =&gt; cookie ) array_unshift( arr);//Array([0]=>puff[1]=>cookie)arrayunshift(arr, 22, 33);// 在数组开头插入多个元素
print_r( a r r ) ; / / 输 出 结 果 : A r r a y ( [ 0 ] = &gt; 22 [ 1 ] = &gt; 33 [ 2 ] = &gt; p u f f [ 3 ] = &gt; c o o k i e ) a r r a y s h i f t ( arr); // 输出结果: Array ( [0] =&gt; 22 [1] =&gt; 33 [2] =&gt; puff [3] =&gt; cookie ) array_shift( arr);//Array([0]=>22[1]=>33[2]=>puff[3]=>cookie)arrayshift(arr); // 移出数组第一个元素
print_r($arr); // 输出结果:Array ( [0] => 33 [1] => puff [2] => cookie )
在这里插入图片描述

w e a t h e r = [ ′ s u n ′ , ′ r a i n ′ , ′ h a z e ′ ] ; a s o r t ( weather = [&#x27;sun&#x27;, &#x27;rain&#x27;, &#x27;haze&#x27;]; asort( weather=[sun,rain,haze];asort(weather); // 保持键值关系正序排序
print_r( w e a t h e r ) ; / / 输 出 结 果 : A r r a y ( [ 2 ] = &gt; h a z e [ 1 ] = &gt; r a i n [ 0 ] = &gt; s u n ) s o r t ( weather); // 输出结果:Array ( [2] =&gt; haze [1] =&gt; rain [0] =&gt; sun ) sort( weather);//Array([2]=>haze[1]=>rain[0]=>sun)sort(weather); // 按正常类型正序排序
print_r( w e a t h e r ) ; / / 输 出 结 果 : A r r a y ( [ 0 ] = &gt; h a z e [ 1 ] = &gt; r a i n [ 2 ] = &gt; s u n ) r s o r t ( weather); // 输出结果:Array ( [0] =&gt; haze [1] =&gt; rain [2] =&gt; sun ) rsort( weather);//Array([0]=>haze[1]=>rain[2]=>sun)rsort(weather); // 按正常类型倒序排序:
print_r($weather); // 输出结果:Array ( [0] => sun [1] => rain [2] => haze )

第1个参数表示待排序的数组
第2个可选参数用于指定按照哪种方式进行排序,默认按照数组中元素的类型正常排序。在这里插入图片描述

$data = [‘a’ => 1, ‘b’ => 2, ‘c’ => 3];
var_dump(in_array(2, $data)); // 输出结果:bool(true)
var_dump(array_search(2, $data)); // 输出结果:string(1) “b”
var_dump(array_key_exists(2, $data)); // 输出结果:bool(false)
in_array()和array_key_exists()函数的返回值类型均为布尔型,检测的数据存在返回true,否则返回false。
函数array_search()的返回值则是查找的“值”对应的键名。检索函数返回值类型对程序开发中的判断起着重要的作用。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值