第三章、使用数组

一、数组的初始化

先新建立一个test.php,内容为空便于测试(注意一切php代码都要在<?php?>中编写):

初始化赋值

在这里插入图片描述
$products为一个一维数组,大小为3;$numbers大小为10,内容为1,2…10;$odds中第三个参数意为步幅(步幅设为2),即内容为1,3,5,7,9;$letters内容为a-z。

对内容的访问

手动书写打印
在这里插入图片描述
循环打印
在循环打印中与C语言不同的地方事变量i前始终跟随着$符号:
在这里插入图片描述
两者效果都是一样的,而后者对于数组元素较多时有优势:
在这里插入图片描述

另一种循环打印foreach()

作用效果与以上相同, foreach() 函数中,若(A as B),则使B指向A当前元素,然后进行循环内容(即:echo XXXXX),之后B重新指向A中的下一个元素,直到结束。
在这里插入图片描述

二、关联数组

关联数组的初始化------类似python中的字典

在这里插入图片描述
箭头左边对应的是关键字,右边是其对应的值,这个和python中的字典概念类似

“字典”的赋值

第一种方法创建一个与$prices数组相同的数组。这种方法创建了一个只有一个元素的数组,然后再加上另外两个元素:
在这里插入图片描述
第二种方法 功能与以上代码是等价的。在这种方法中,并没有明确 地创建一个数组。数组是在向这个数组加入第一个元素时创建的:
在这里插入图片描述

“字典”的遍历

foreach()

在这里插入图片描述
在这里插入图片描述

while循环中使用的each()函数

-----该语法运行的效果与上面的相同。
each() 将返回当前指向的元素,该元素位于$prices中,并且赋值给$element,之后指向下一个元素,并在执行完一次循坏时,将新指向的元素再次赋值给$element,直到指向数组末尾是,while循环结束。
在这里插入图片描述

更高级的方式----list()和reset()

list() 建立了一个链表,分别指向了prices里面的2个关键字,并且分别重新命名为product和price;
需要注意的一点是,当使用each()函数时,数组将记录当前元素。如果希望在相同的 脚本中两次及以上使用该数组,就必须使用函数 reset() 将当前元素重新设置到数组开始处。
在这里插入图片描述

三、PHP中的数组操作符表

注意:期中的$a$b均为一个数组:
在这里插入图片描述

四、多维数组

二维数组的初始化

在这里插入图片描述

打印

手写打印
在这里插入图片描述
2个for循环嵌套打印
在这里插入图片描述
最终呈现效果
在这里插入图片描述

使用“字典”实现二维数组的打印

在这里插入图片描述

二维数组:“字典”+list()+each()

更高级的用法:可以使用for循环遍历外部的数字索引数组$products$products数组的每一行都是一 个具有描述性索引的数组。在while循环中使用each()和list()函数,可以遍历整个内部数组。因此,需要一个内嵌有while循环的for循环,下面代码的作用等于刚刚的79~83行代码:
在这里插入图片描述

五、数组的排序

一维数组的排序

sort()-----按字母或者数组升序排序

注意 :sort()函数是区分字母大小写的。所有大写字母都在小写字母的前面。例如:A 小于Z,而Z小于a
在这里插入图片描述
而该函数的第二个参数是可选的。这个可选参数包括:SORT_REGULAR(默认值)、SORT_NUMERICSORT_STRING。例如, 当要比较可能包含有数字2和12的字符串时。从数字角度看,2要小于12,但是作为字符 串,‘12’却要小于’2’。此时可以通过勾选第二个参数来决定传递的类型。

asort()函数和ksort()函数

asort()根据数组的每个元素值进行排序;
ksort()根据数组的每个关键字进行排序:
在这里插入图片描述

反向排序–rsort()、arsort()和krsort()

sort()、asort()和ksort()对应各种的反向排序为:rsort()、arsort()和krsort()。
用法完全一致,只不过反向排序是降序排序。

多维数组的排序

usort()、uasort()、uksort()函数

首先仍然引用上面的二维数组赋值:
在这里插入图片描述
在这里插入图片描述
之后在这通过使用function定义一个自己的函数(此处名为compare),实现的是通过比较X和Y数组中的第一个元素(即名称)返回对应的值。而 usort 函数中第一个参数是二维数组的名字,第二个参数是你自己编写的函数,通过其返回的值来排序(在这里是按首元素的 字母 进行 升序 排序)。同理,通过数字的话,在自定义函数中改为比较X[2]和Y[2]即可。
uasort()、uksort()作用类推,即都是asort()、ksort()之前加了个u(即user的意思,因为第二个参数传入的均为用户自定义函数的返回值)。

反向排序

反向排序没有rusort等的函数存在,使用的依旧是usort,只不过需要自己修改一下自定义函数的返回值,即在$products函数的基础上,将X>Y的返回值和X<Y的返回值对调即可实现降序。

重新排序

shuffle()—一个随机排序的函数

使用方法:shuffle($products);,在之前代码块中给前者$products数组赋值不变的情况下,每次重新加载进入该网页,实际呈现出来的$products数组均是不同的排序。

array_push()

在这里,创建了一个空数组$numbers,然后使用array_push()函数将每个新元素添加到数组$numbers的 末尾:
在这里插入图片描述

array_pop()

作用是:用来删除并返回数组末 尾的一个元素,刚好与array_push()作用效果相反。

array_reverse()

更简单的方式:
在这里插入图片描述
该效果返回的数组同样也是一个逆序排序的数组

六、文件中载入数组

实际执行前,先在之前创建的orders文件内再添加一些数据:
在这里插入图片描述
之后新建一个vieworders2.php文件。

代码分析

打开文件orders.txt,count()函数用来统计数组中的元素个数,之后判断文件是否为空:
在这里插入图片描述
输出网页数组的标题内容以及设置背景色:
在这里插入图片描述
在这里插入图片描述

explode()

函数用来根据"\t"分割每行;好处是在开始打印前可以再做一些处理与格式化。并且 迪三个参数为可选参数,可以用来限制被返回的最大块数。

intval()

函数用于获取变量的整数值,可以将一个字符串转化成一个整数,它可以忽略某些部分。
在这里插入图片描述

全部代码

<html> 
<head> 
<title>Bob's Auto Parts-Customer Orders</title> 
</head> 
<body> 
<h1>Bob's Auto Parts</h1> 
<h2>Customer Orders</h2> 
<?php 
//Read in the entire file. 
//Each order becomes an element in the array 
$orders=file("orders.txt"); 
//count the number of orders in the array 
$number_of_orders=count($orders); 
if($number_of_orders==0){ 
    echo"<p><strong>No orders pending. 
    Please try again later.</strong></p>"; 
}
echo"<table border=\"1\">\n"; 
echo"<tr><th bgcolor=\"#CCCCFF\">Order Date</th>
<th bgcolor=\"#CCCCFF\">Tires</th> 
<th bgcolor=\"#CCCCFF\">Oil</th> 
<th bgcolor=\"#CCCCFF\">Spark Plugs</th> 
<th bgcolor=\"#CCCCFF\">Total</th> 
<th bgcolor=\"#CCCCFF\">Address</th> 
<tr>"; 
for($i=0;$i<$number_of_orders;$i++){ 
    //split up each line 
    $line=explode("\t",$orders[$i]); 
    //keep only the number of items ordered 
    $line[1]=intval($line[1]); 
    $line[2]=intval($line[2]); 
    $line[3]=intval($line[3]); 
    //output each order 
    echo"<tr> <td>".$line[0]."</td> 
    <td align=\"right\">".$line[1]."</td> 
    <td align=\"right\">".$line[2]."</td> 
    <td align=\"right\">".$line[3]."</td> 
    <td align=\"right\">".$line[4]."</td> 
    <td>".$line[5]."</td> </tr>"; 
}
echo"</table>"; 
?>
</body>

七、其它一些函数

数组内的指针

current()

如果创建一个新数组,那么当前指针就将被 初始化 ,并指向数组的第一个元素。调用 current()将返回第一个元素。

reset() | end()

返回参数数组中第一个元素 | 返回参数数组中最后一个元素

next() | prev() | each()

调用next()是将指针前移, 然后再返回新的当前元素。即先移后返回 | prev()将当前指针往回移一个位置然后再返回新的当前元素。即 前移后返回
| 调用each()会在指针前移一个位置之前返回当前元素,即 先返回后移

对数组元素的操作

array_walk()

array_walk(array arr,string func,[mixed userdata]) ,作用是可以自己定义一个函数func,对数组arr中每一个元素使用,第三个参数可选,它可以作为一个参数传递给我们自己的函数func。

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

count()sizeof() 均是对元素个数进行统计;
array_count_values() 将会统计每个特定的值在参数数组中出现过的次数;

extract()

原型是extract(array var_array[,int extract_type][,string prefix])
作用:通过一个数组var_array创建一系列的标量/变量,这些标量/变量的名称必须是 数组中关键字的名称,而标量/变量值则是数组中的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值