百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

PHP从入门到精通(php从入门到精通 pdf)

haoteby 2025-02-04 14:07 10 浏览

本文章为连载文章PHP入门的第二篇

建议先阅读前篇文章:PHP从基础到入门(三)

数组

数组基础

含义:

数组就是一系列数据的集合体,他们按设定的顺序排列为一个“链的形状”。

注意:php中的数组单元的顺序,跟下标无关!

数组定义(赋值):

$arr1 = array(3, 11, 5, 18, 2 );//这是最常见的数组,下标为“默认下标”,就是从0开始的整数;

$arr2 = array(“a”=>3, “bb”=>11, “cc123”=>5, ‘d1’=>18, ‘xyz’=>2 );关联数组,下标为字符串,常见

$arr3 = array(1=>3, 10=>11, 3=>5, 0=>18, 88=>2 );下标可以人为给定;

$arr4 = array(1=>3, ‘a1’=>11, 3=>5, ‘mn’=>18, 88=>2 );下标可以数字和字符串混合使用;

$arr5 = array(5=>3, 11, 3=>5, ‘mn’=>18, 2 ); //有指定下标,也有“自动下标”,

//此时下标为:5,6,3,”mn”, 7

//可见,自动下标为“前面最大数字下标+1”

$arr6 = array(5=>3, 7.7=>11, 3=>5, ‘mn’=>18, 2 ); //此时下标为:5,7,3,”mn”, 8

$arr7 = array(5=>3, true=>11, false=>5, ‘mn’=>18, 2 ); //此时下标为:5,1,0,”mn”, 6

$arr8 = array(1=>3, 3=>33, true=>11, ); //此时下标为:1,3,其对应值为:11, 33

//下标如果有重复,后面的值覆盖前面的值;

$arr9 = array(1=>3, -3=>33, 11, ); //此时下标为:1, -3, 2,注意:最后一个逗号“可以有”。

其他一些形式:

$arr10[] = 3;

$arr10[] = 11;

$arr10[] = 5; //该数组下标为0,1,2,常规情况

$arr11[‘a’] = 3;

$arr11[‘bb’] = 11;

$arr11[‘cc123’] = 5; //该数组下标为’a’,’bb’,’cc123’,常规情况

$arr12[1] = 3;

$arr12[] = 11; //此时下标为2

$arr13[‘cc123’] = 5; //该数组下标为1,2,’cc123’

特别注意:php中,数组单元的顺序,是由其“放入”顺序决定,而不是下标。

数组取值:

$v1 = $arr1[0];

$i = 3;

$v2 = $arr1[$i]; //取得数组下标为3的单元的值;

总体上,可以将取得一个数组的单元的值,看组取得一个变量的值完全一样!!!

数组的分类

按键值关系来分:

索引数组:通常认为,如果一个数组的下标是严格按照从0开始的连续的整数作为下标,则称其为索引数组——就是类似js数组的下标。例如:

$arr1 = array(3, 11, 5, 18, 2 );//这是最常见的数组,下标为“默认下标”,就是从0开始的整数;

关联数组:通常认为,如果一个数组的下标都是一个“字符串”并一定程度上表名了该单元的“含义”,则称为关联数组,例如:

$conf = array(

‘host’=>”localhost” ,

‘port’=>3306 ,

‘username’=>’root’ ,

‘password’ => ‘123’ ,

);

混合数组:既有数字下标,也有字符下标的情况:

$arr4 = array(1=>3, ‘a1’=>11, 3=>5, ‘mn’=>18, 88=>2 );下标可以数字和字符串混合使用;

按数组的维数(复杂程度)分:

一维数组:

$a = array(1, 11, 111);

$b = array(2, 22, 222);

$c = array(3, 33, 333);

二维数组:

$dd = array(

array(1, 11, 111),

array(2, 22, 222),

array(3, 33, 333)

);

多维数组:无非就是继续里面再用数组代替。

数组的基本使用

求一个一维数组的平均值:

求一个二维数组的平均值:

求一个一维数组的最大值:

求交换一个一维数组的最大值和最小值的位置:

有关数组的交换,再说两句:

$a = array( 3, 11, 5, 7, 20, 18); //下标是0,1,2,3,4,5

需求1:交换数组第0项和第3项:

$v1 = $a[0];

$v2 = $a[3];

$t = $v1;

$v1 = $v2;

$v2 = $t;//这种做法根本不行,因为v1,v2只是2个变量,跟数组没有关系了!

正确的做法是:

$t = $a[0];

$a[0] = $a[3];

$a[3] = $t;

需求2:交换数组首项和末项:

$pos1 = 0; //首项的下标

$pos2 = count($a) - 1; //最后一项的下标

$t = $a[$pos1];

$a[$pos1] = $a[$pos2];

$a[$pos2] = $t;

需求3:交换数组最大项和最小项:

$pos_max = ....; //经过一番计算得到最大项的下标;

$pos_min = ....; //经过一番计算得到最小项的下标

$t = $a[$pos_max];

$a[$pos_max] = $a[$pos_min];

$a[$pos_min] = $t;

数组的遍历

foreach基本语法

foreach( $数组变量名 as 【$key =>】 $value ){

//循环体;这里可以去“使用”$key 和 value;

//$key 和 $value 就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值。

//而且,它总是从数组的开头往后按顺序取数据。

}

数组的指针操作及遍历原理:

首先,看看数组的一个“形象图”:

$arr4 = array(1=>3, ‘a1’=>11, 3=>5, ‘mn’=>18, 88=>2 );

可以将其以视觉化的方式理解为:

数组下标:1“a1”3“mn”88
对应数据:8115182

其中,该箭头,就是数组内部的所谓“指针”——注意,不可见,不可输出,只是一种辅助理解的图形!

说明:

1,该箭头,就是数组内部的所谓“指针”

2,默认情况下,该指针指向数组的第一个单元。

3,数组的有关单元的操作,如果没有指定下标,则就是针对该指针指向的单元的操作。

4,所谓遍历,其实就是一次次取得当前单元的键和值,并放入对应的变量$key, $value,然后移动指针到下一个单元。

则,数组,作为一个“总体数据单位”,有如下指针操作函数可以使用:

1,$v1 = current($数组); //获得数组的当做指针所在单元的“值”;

2,$v2 = key($数组); //获得数组的当做指针所在单元的“键”(下标);

3,$v3 = next($数组); //先将数组的指针移向下(后)一个单元,然后取得该新单元的值;

4,$v4 = prev($数组); //先将数组的指针移向上(前)一个单元,然后取得该新单元的值;

5,$v5 = end($数组); //先将数组的指针直接移向最后一个单元,然后取得该新单元的值;

6,$v6 = reset($数组); //先将数组的指针直接移向第一个单元,然后取得该新单元的值;

foreache遍历流程原理图:

foreach( $数组变量名 as $key => $value ){

//循环体;这里可以去“使用”$key 和 value;

//$key 和 $value 就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值。

//而且,它总是从数组的开头往后按顺序取数据。

}

其基本原理示意图如下:

输出结果为:

可见:遍历之后,指针已经超出数组合理位置了。

使用for和next遍历数组

注意:对php数组,往往不能单纯使用for循环进行遍历。

或者说:php中,使用for循环只能循环“下标为连续的纯整数数组”;

结果:

each()函数的使用

each()函数的作用:先取得一个数组的“当前单元”的下标和值(并放入一个数组),然后将指针移到下一个单元。

使用形式:

$a = each($数组名); //此时$a就是一个数组了

list()“函数”的使用:

list()函数用于一次性取得一个数组中从0开始的数字下标的多个单元的值!

形式:

list($变量1,$变量2,$变量3, .. ) = $数组;

作用:

上述一行代码相当于如下代码:

$变量1 = $数组[0];

$变量2 = $数组[1];

$变量3 = $数组[2];

........

注意:这里变量的个数,要跟该数组的数字下标的单元对应,如果某个变量对应的该数字下标不存在,就会报错!

while+each()+list()遍历数组

数组变量的一些细节

foreach也是正常的循环语法结构,可以有break和continue等操作。

遍历过程中值变量默认的传值方式是值传递。

结果为:

遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key => &$value){ ... }

结果为:

foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环(原数组保持不变)。

以下演示的是“foreach默认是原数组上进行遍历”的效果:

然后,再演示:在某些情况下(修改或指针操作),不是在原数组身上进行遍历。

结果为:

foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

相关推荐

如何随时清理浏览器缓存_清理浏览器缓存怎么弄

想随时清理浏览器缓存吗?Cookieformac版是Macos上一款浏览器缓存清理工具,所有的浏览器Cookie,本地存储数据,HTML5数据库,FlashCookie,Silverlight,...

Luminati代理动态IP教程指南配置代理VMLogin中文版反指纹浏览器

介绍如何使用在VMLogin中文版设置Luminati代理。首先下载VMLogin中文版反指纹浏览器(https://cn.vmlogin.com)对于刚接触Luminati动态ip的朋友,是不是不懂...

mac清除工具分享,解除您在安全方面的后顾之忧

想要永久的安全的处理掉重要数据,删除是之一,使用今天小编分享的mac清除工具,为您的操作再增一层“保护”,小伙伴慎用哟,一旦使用就不可以恢复咯,来吧一起看看吧~mac清除工具分享,解除您在安全方面的后...

取代cookie的网站追踪技术:”帆布指纹识别”

【前言】一般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动。Co...

辅助上网为啥会被抛弃 曲奇(Cookie)虽甜但有毒

近期有个小新闻,大概很多小伙伴都没有注意到,那就是谷歌Chrome浏览器要弃用Cookie了!说到Cookie功能,很多小伙伴大概觉得不怎么熟悉,有可能还不如前一段时间被弃用的Flash“出名”,但它...

浏览器指纹是什么?浏览器指纹包括哪些信息

本文关键词:浏览器指纹、指纹浏览器、浏览器指纹信息、指纹浏览器原理什么是浏览器指纹?浏览器指纹是指浏览器的各种信息,当我们访问其他网站时,即使是在匿名的模式下,这些信息也可以帮助网站识别我们的身份。...

那些通用清除软件不曾注意的秘密_清理不常用的应用软件

系统清理就像卫生检查前的大扫除,即使你使出吃奶的劲儿把一切可能的地方都打扫过,还会留下边边角角的遗漏。随着大家电脑安全意识的提高,越来越多的朋友开始关注自己的电脑安全,也知道安装360系列软件来"武装...

「网络安全宣传周」这些安全上网小知识你要知道!

小布说:互联网改变了人们的衣食住行,但与之伴生的网络安全威胁也不容忽视。近些年来,风靡全球的勒索病毒、时有发生的电信诈骗、防不胜防的个人信息泄露时时刻刻都威胁着我们的生活。9月18日-24日是第四届...

TypeScript 终极初学者指南_typescript 进阶

在过去的几年里TypeScript变得越来越流行,现在许多工作都要求开发人员了解TypeScript...

jQuery知识一览_jquery的认识和使用

一、概览jQuery官网:https://jquery.com/jQuery是一个高效、轻量并且功能丰富的js库。核心在于查询query。...

我的第一个Electron应用_electronmy

hello,好久不见,最近笔者花了几天时间入门Electron,然后做了一个非常简单的应用,本文就来给各位分享一下过程,Electron大佬请随意~笔者开源了一个Web思维导图,虽然借助showSav...

HTML5 之拖放(Drag 和 Drop)_html拖放api

简介拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在HTML5中,拖放是标准的一部分,任何元素都能够拖放。先点击一个小例子:在用户开始拖动<p>元素时执行JavaScrip...

如何用JavaScript判断输入值是数字还是字母?

在日常开发中,我们有时候需要判断用户输入的是数字还是字母。本文将介绍如何用JavaScript实现这一功能。检查输入值是否是数字或字母...

图形编辑器开发:快捷键的管理_图形编辑工具

大家好,我是前端西瓜哥。...

浏览器原生剪贴板:原来它能这样读取用户截图!

当我们使用GitHub时,会发现Ctrl+V就能直接读取用户剪贴板图片进行粘贴,那么它是如何工作的?安全性如何?...