一、数组的初始化
先新建立一个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_NUMERIC
和SORT_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创建一系列的标量/变量,这些标量/变量的名称必须是 数组中关键字的名称,而标量/变量值则是数组中的值。