【自学php】第四天 - 使用数组
php支持两种数组,数字索引数组和关联数组。关联数组有点类似Map,可以用字符串或其他数据类型做键对应相应的值保存在数组中。
1.初始化数组
数字索引数组的初始化可以使用如下代码:
$products = array('Tires', 'Oil, 'Spark Plugs');
因为数组和其他变量一样,不需要预先初始化或创建,所以下面的代码创建了和上面相同的数组:
$products[0] = 'Tires';
$products[1] = 'Oil';
$products[2] = 'Spark Plugs';
关联数组的初始化:
$prices = array('Tires' =>100, 'Oil' =>10, 'Spark Plugs' =>4);
也可以用$prices['Tires'] = 100这样的形式来初始化。
2.访问数组元素
可以使用数字索引或关键字来访问数组元素:$products[0]或$prices['Tires']。
使用循环访问数字索引数组:
for($i=0; $i<3; $i++){
echo $products[$i]." ";
}
foreach ($products as $current) {
echo $current." ";
}
使用循环访问关联数组:
foreach ($prices as $key => $value) {
echo "$key - $value<br>";
}
/*
遍历数组后,数组指针在尾部,想要重新遍历数组要用reset()函数把指针重置到数组头部
*/
reset($prices);
/*
each()函数返回当前元素的数组,并将指针指向下一个元素。
$element也是一个关联数组,key和0指向当前元素的关键字,value和1指向当前元素的值。
*/
while ($element = each($prices)) {
echo $element['key'];
echo " -- ";
echo $element['value'];
echo "<br>";
}
reset($prices);
/*
list()允许命名新变量,将each()返回的数组中的0,1两个元素赋给新变量
*/
while (list($product, $price) = each($prices)) {
echo "$product --- $price<br>";
}
3.数组排序
sort()函数可以将数组进行升序排序,它的第一个参数是数组,第二个参数是可选的:SORT_REGULA(默认值), SORT_NUMERIC,SORT_STRING。
asort()和ksort()用于关联数组排序,asort()根据每个元素值进行排序,ksort()根据关键字排序。
实现反向排序的对应函数是rsort(), arsort()和krsort()。
shuffle()将数组随机排序,array_reverse()给数组反向排序。
现在为汽车零件网店做一个动态的首页,将零件的图片存在数组中,随机排序然后选出前3张,frontpage.php如下:
<?php
$pictures = array('tire.jpg', 'oil.jpg', 'spark_plug.jpg', 'saddle.jpg', 'steering_wheel.jpg');
shuffle($pictures);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>汽车配件网店</title>
</head>
<body>
<h1>汽车配件网店</h1>
<div align="center">
<table width="100%">
<tr>
<?php
for($i=0; $i<3; $i++){
echo "<td align='center'><img src='".$pictures[$i]."'/></td>";
}
?>
</tr>
</table>
</div>
</body>
</html>
4.从文件载入数组
file()函数将整个文件载入一个数组中,文件中的每一行成为数组中的一个元素。
explode()函数用分隔符把字符串分割成数组。
用上述两个函数将订单查看页面重新显示一下,vieworders2.php:
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>订单查看页</title>
</head>
<body>
<h1>汽车配件网店</h1>
<h2>查看订单</h2>
<?php
$orders = file("$DOCUMENT_ROOT/../orders/orders.txt");
$orderamount = count($orders); if($orderamount == 0){
echo "<p><strong>暂时还没有订单,请稍后重试。</strong></p></body></html>";
exit;
} echo "<table border='1'>\n";
echo "<tr class='title'>
<th>Order Date</th>
<th>Tires</th>
<th>Oil</th>
<th>Spark Plugs</th>
<th>Total</th>
<th>Address</th>
</tr>"; foreach ($orders as $order) {
$line = explode("\t", $order);
$line[1] = intval($line[1]);//提取整数部分
$line[2] = intval($line[2]);
$line[3] = intval($line[3]); echo "<tr><td>".$line[0]."</td>
<td>".$line[1]."</td>
<td>".$line[2]."</td>
<td>".$line[3]."</td>
<td>".$line[4]."</td>
<td>".$line[5]."</td>
</tr>";
}
echo "</table>"
?>
</body>
</html>
显示结果如下:

5.数组的其他操作
array_push()将新元素添加到数组的末尾。
array_pop()删除并返回数组末尾的元素。
count()和sizeof()统计数组元素的个数。array_count_values(),统计每个元素出现的次数,它会返回一个关联数组,数组元素为键,值就是该元素出现的次数。
还有很多其他操作数组的函数,需要的话可以查看API。
【自学php】第四天 - 使用数组的更多相关文章
- JavaSE回顾及巩固的自学之路(四)——————方法和数组,面向对象
今天是2018.03.31,emmmmmm.好像距离上一次写Javase回顾总结已经好久好久过去,差一点就以为要停更了,哈哈哈. 其实呢,最近是真的好忙(额,这段时间觉得自己一直在学习) ...
- 自学Java第四章——《数组》
4.1 数组的相关概念和名词(了解) 1.数组(array): 一组具有相同数据类型的数据的按照一定顺序排列的集合. 把有限的几个相同类型的变量使用一个名称来进行统一管理. 2.数组名: (1)这个数 ...
- HMM 自学教程(四)隐马尔科夫模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- 分享非常有用的Java程序 (关键代码)(四)---动态改变数组的大小
原文:分享非常有用的Java程序 (关键代码)(四)---动态改变数组的大小 /** * Reallocates an array with a new size, and copies the co ...
- Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统
Android For JNI(四)--C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统 好几天每写JNI了,现在任务也越来越重了,工作的强度有点高,还有好几个系列的博客要等着更新,几本 ...
- 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数
孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...
- 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成
孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
- 孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类尝试第一天
孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类,尝试第一天 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 按上一天的规划,这是根据过去我自学其它编程语 ...
- 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...
随机推荐
- 关于meta定义 和 link
<!DOCTYPE html> <!-- HTML5 doctype 不区分大小写 --> <html lang="zh-cmn-Hans-CN"&g ...
- AspectJ的安装和Eclipse的AJDT插件的配置
一.安装AspectJ:1.从http://www.eclipse.org/aspectj/downloads.php 下载AspectJ(目前发布的最新版为1.8.6);2.解压下载下来的jar文 ...
- Python学习笔记(五)Python的切片和迭代
切片 Python提供了切片操作符,可以对list.tuple.字符串进行截取操作. list中的切片应用 语法如下: >>> L = ['Michael', 'Sarah', 'T ...
- django models 类型整理 version:1.8.3
django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...
- 混合使用Azure LB和ILB访问相同web服务(3)
接下来我们来配置Azure Load balancer,就是面向公网的负载均衡器: 1.在该测试中,为了保持内网访问和外网访问一样的体验,本地端口和public端口和ILB一样,同样是80: PS C ...
- Oracle EBS-SQL (BOM-16):检查多层BOM.sql
select rownum seq_num, lpad(to_char(level), decode(level, 1, 1, level + 1), '.') bom_level, bbm.ASSE ...
- SD卡在单片机上的应用
(1)SD卡的引脚定义: SD卡SPI模式下与单片机的连接图: 注意:SPI模式时,这些信号需要在主机端用10~100K欧的电阻上拉. SD卡支持两种总线方式:SD方式与SPI方式. ...
- 站在巨人的肩膀上,C++开源库大全
程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列 ...
- 跟我开发NSP(网上查询平台):如何选择开发项目
我想通过一个真实的项目开发的全过程,记录一下开发过程的点点滴滴,记录一下过程中的前思后想.这个全过程包括,如何选择项目.如何分析项目.如何组织项目开发.如何设计开发流程.如何设计软件的总体架构.如何建 ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...