PHP入门笔记
php简介
什么是php
一种服务器端的脚本编程语言。
一种创建动态交互性的脚本服务器语言。
php是解释型语言,无需编译直接运行。
php全称为“php hypertext preprocessor”
php前身
使用perl开发的个人主页语言,后演化为超文本预处理器,底层为c语言。
什么是php文件
php文件包含html,css以及php代码。
php代码在服务器上执行,结果以纯文本返回给浏览器
文件后缀是.php
php的优点
- 跨平台性:Linux,win,mac都可以
- 兼容性:几乎所有服务器,多种数据库
- 易学性:易于学习且免费
点PHP技能的推荐前置技能加点
- html(略通)
- css(略通)
- JavaScript(会点)
//要是一点也不懂得这三样那学起来可能有点吃力,看我的笔记倒是没什么了,但是在想前进的话还是建议先学上面三个,更简单一些还容易看到自己的进步,直接学php可能会郁闷,因为后端学习不像是前端一样学完就很快能看见自己的进步,有时候会怀疑自己学了个啥。
常见的php编辑器及其小工具
//因为php是服务端的语言,所以需要配置环境,配置环境耗时而且感觉学不到什么,配置环境即便是手把手跟着教程来也可能能出现各种小问题,计算机基础好的同学可能没感觉,自己琢磨一下就搞定了,但要是基础不好的会在这里就弃坑了,所以我更推荐另一种方法,适合一点基础都没有的小白白,在搜索引擎搜php在线,然后进去正常写就好了,本篇笔记的所有案例都可以在在线php之中运行出来,可以等到全学完了在慢慢回头补配置环境这里,所以米娜桑们可以跳过环境搭建这一小结。直接去学习php基本语法。当然你要是想挑战自己的软肋或者有相关基础可以简单那看一下,见笑了。
1.vs code(很好用的写代码工具)
2.notepad --(Notepad-- 是使用C++编写的轻量级文本编辑器, 简称ndd, 可以支持Window/Mac/Linux操作系统平台。){ notepad++自己爆了//这里不讨论,自行搜索}
3.notepad next(NotepadNext 是一个开源的跨平台文本编辑器,基于 Qt 和 Notepad++ 的功能。)
4.phpstorm(很好用的写代码工具)
5.phpstudy(小皮面板//继承了很多环境){ 用它的话可以直接配置好环境,但已开始学不建议用它,可以简单学完apache,mysql后在回来用,因为这毕竟是一种取巧的工具,小白白们一开始就用容易筑基不稳 }
6.各种在线编写php的网站(适合小白白,因为后端知识很杂很碎,小白白直接看各种配置简直是折磨)
PHP拓展知识(有过相关技能加点的直接过)
后端基础(域名,端口,dns,环境配置)
服务器概念:提供服务的机器(文件服务器,数据库服务器,应用程序服务器,web服务器)
Ip地址:网络之间的互联协议,理论上ip地址有唯一性
特殊ip地址:127.0.0.1,代表着本机
域名:由点分隔组成的名字,一台计算机或者一组计算机的名称。有时候也指某些地理位置。 特殊的域名:localhost,代表着本机域名
因为如果单纯记住ip过于复杂,域名的存在相当于简化了互联网之间的访问,只需要记住域名便可以访问对应的ip。
DNS:存储域名的在线服务器,只需要访问dns服务器就可以通过一串域名来找到对应的ip。
本地也有一个小的dns文件,一些常见的网址就存储到本机,不用每次都当问dns服务器。
端口:设备与外界通讯交流的出口,端口分为虚拟端口和物理端口
物理端口:那些可见的,如usb,网口等。
虚拟端口:不可见的,设备虚拟出来的,如80端口,21端口。
网站运行基本原理(静态网站,动态网站)
网站的运行基本原理:用户设备启用浏览器—》DNS进行解析—》返回给用户ip地址:端口—》目标服务器—》通过端口打开并使用目标服务器特定软件—》返回给用户浏览器—》浏览器进行解析并渲染。
静态网站:没有交互,早期互联网时代全是这种网站。
动态网站:可交互,可变化,现代互联网时代多数使用这类网站。(可能会有服务器解析,数据库等。)
环境搭建
Apache:安装在服务器端使其变成web服务器的软件。
注意点:
- 在安装界面时候80端口选项意思是所有人都可以访问
- 8080端口的意思是不允许外部访问
- 建议更改apache的安装位置,如果是学习的话建议单独配置安装时候的apache HTTPserver xxxx
- 如果是最新版本的apache,解压完后运行cmd(管理员权限)在bin文件下运行httpd -k install
- Conf文件夹,存放一些配置文件的地方
- Htdocs文件夹,存放默认主机地址的地方(网站根目录)
- Modules文件夹,存放apache模块的地方
- Bin-》ab.exe:压力测试的软件
- Bin-》httpd.exe:apache的进程,在任务管理器下找到这个说明服务器进程在进行。
- Bin-》apachemonixxxx.exe:apache的图标管理模块,相当于原神的启动器。
- 每次对apache修改都需要重启才会生效。
Httpd.exe详细解析:通过cmd启动httpd.exe,可查看是否正常,
-M(大写):检查相应加载的模块(static静态加载-启动就加载,shared动态加载-用的时候在加载)
Cmd在bin目录下:httpd -t可以验证是否正常(syntax OK)
Cmd使用技巧:cd 目录地址(进入到相应的路径)
(大写字母:切换盘符):如E:
11.在apache的安装目录下的conf—》httpd.conf——》找到对应关键字ServerRoot ,这里填写apache的根目录
配置默认站点:
通过前面的基础,已经能明白访问网站的具体方法,那么如何在本地开发?如果访问域名那无法定位到本机的文件路径,所以在正式开始之前还需要配置一下。
首先要让apache知道网站的主目录在哪里,也就是访问什么。
- 在apache的安装目录下的conf—》httpd.conf——》找到对应关键字”DocumentRoot”,在通常情况下apache默认是安装目录的htdocs文件夹下
注意,下面的《Dirxxxxxx》也要修改,不然会报错403。
- 方便使用,起一个域名,在apache的安装目录下的conf—》httpd.conf——》找到对应关键字“ServerName”
默认为#SeverName localhost:80,改为SeverName localhost,把前面的#注释和后面的:80删除掉。
新版默认为ServerName www.example.com:80
- 端口可以单独实现:在apache的安装目录下的conf—》httpd.conf——》找到对应关键字“listen”
- 对于dns的修改,通过修改本地dns来实现访问本地地址文件。本地的dns配置优先级高于网络dns,这样修改后可以直接访问本机的文件了。
Win系统下:C:window/system32/drivers/etc/(hosts)
修改hosts文件,新增一行127.0.0.1 localhost
Php的安装与配置
- 在官网下载好对应的PHP版本
- 根目录下ext是PHP的扩展
- Php.exe就是解释器
- Php.ini.xxxx是PHP的配置文件后缀为development是开发板,p'roduction是生产版。
检测PHP解释器是否正常
- 通过cmd进入php.exe目录
- 使用php.exe -f xx.php(目标php的路径)
Apache加载PHP
- 在PHP官网之中下载正确的版本会有apache的支持插件,一般是
“php(php的版本号)apache(apache的版本号)”
2. 在apache的conf文件夹修改httpd.conf文件,找到
“LoadModule”在下方增加一行代码
“ ’LoadModule (名称自定义)php_module ‘php文件地址引用1’ ”
“php8这里的单引号换成双引号”
“不同版本的php在这里配置有不同,有的单引号,有的需要填写版本号等”
3. 检测apache是否加载成功,运用上面学过的httpd -M
4. 让apache知道php文件交给php工作
//php的配置文件目录,把php文件路径下的Php.ini.xxxx改成in,一个就可以。
PHPIniDir "E:/phpapachesql/php/"
//让apache知道php文件交给php工作
AddType application/x-httpd-php .php .phtml
加载MySQL
1.安装mysql
MySQL安装教程(详细版)_mysql安装教程8.0.36-CSDN博客
- mysql目录介绍
- Bin(执行文件)
- Data(数据存储文件夹)
- Lib(核心文件夹)
- My.in(配置文件)8.0没有安装文件
- Bin\mysql.exe(访问mysql的客户端)
- Bin\mysqld.exe(mysql服务)
- Bin\mysqldump.exe(mysql备份客户端。)
PHP快速学习的配置知识
//这两个属于把复杂的操作直接集成了,也就是说不用辛苦配置改东西,很人性化的就能配置好,基本上看一眼就会了,但为什么不推荐呢?这就好比考试一直用计算器算题,哪天计算器坏了就傻了,还是建议先学一遍基础配置,再去用这两个。完全小白也可以用,起码不用自己来回配置。
小皮面板(php的集成环境)
Xampp(php的集成环境)
PHP基本语法
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 <?php 开始,以 ?> 结束:
例子:<?php// PHP 代码?>
Echo与print
Echo
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
例
<?php
echo "Hello World!";
?>
<?php
echo("您好")
?>
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
例
<?php
print "Hello world!<br>";
?>
<?php
print ("php启动")
?>
区别:
echo - 可以输出一个或多个字符串
//<?Php echo"您好","好的","飞起来!" ?>,
显示为:您好好的飞起来!
Print -不可以一行输出多个字符串
//<?Php print"您好","好的","飞起来!" ?>,
显示为:Parse error: syntax error, unexpected ',' in 本机地址on 错误行数
print - 只允许输出一个字符串,返回值总为 1
//<?Php echo print'x' ?>
显示为:x1
echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
补充用法:echo与print通过“”可以直接输出html的标签
<body>
<p>唱跳rap篮球</p>
<?php echo ("<hr>"); ?>
<p>乐典孝急蚌赢</p>
<?php print ("<hr>") ?>
</body>
补充用法:echo如果这样无法输出多个字符。
echo(“罕见”,”稀有”,”传说”);
echo 如果用括号的话需要这样写。
echo ("举办"),("谢谢");
PhP的注释
//这是单行注释
# 这也是单行注释
-----------------------------
/*
这是多行注释
*/
-----------------------------
/**
*
*这也是多行注释
*多行注释
*/
PHP让浏览器按照指定字符集解析
//让浏览器知道按照什么格式去解析字符集,加上去之后不会出现乱码
header(“Content-type:text/html;charset=utf-8“);
PhP的变量
声明变量$ x
赋值x=10
声明并赋值$x=10
删除变量:
使用unset
例如:Unset $变量
Php中文变量
在php之中可以使用中文变量,但是不建议
$中国='zhong';
echo ($中国);
(结果为zhong)
PHP可变变量
如果一个变量保存的值刚好是另一个变量的名,那么将会直接访问另一个变量的值。
$a='b';
$b='飞起来';
echo $$a;
(输出为 飞起来)
php变量的命名规则
- 以$开头
- 必须以字母或者下划线开头
- 不能以数字开头,不能有空格
- 变量名只能包含字母,数字,下划线
- 区分大小写
注:php的关键字,自定义函数,都不区分大小写,除了变量。
Php预定义变量
就是php默认定义好了的变量,还有以后可能确定的变量,这些是不允许用户起名字和一样的。
变量传值
变量传递一共有两种方式
1.值传递:将变量保存的值复制一份。在将复制的值给新变量。
($a=1 $b=$a)
2.引用传递:将变量所在值的内存地址,传递给另一个变量,两个变量指向一个内存空间。(牢变量改变新变量也会随之改变)
($新变量=&$老变量)
拓展
在内存之中通常有几个分区
1.栈区:程序可以操作的内存部分
2.代码段:储存程序的内存部分
3.数据段:存储普通数据
4.堆区:存储复杂数据
php的常量
在程序运行过程之中不可以改变的变的数据。
有两种定义常量的方式。
- 使用定义常量的函数define(‘常量名’,’常量值’)
- 5.3版本只会才会有的:const 常量名=值;
常量通常使用大写字母和变量区分开来。
使用常量
- 跟变量相同的方法去使用 echo 常量名;
- 使用constant(‘常量名’)
系统常量
系统默认已经定义好的常量
常见的有“PHP_VERSION,PHP_INT_SIZE,PHP_INT_MAX”
魔术常量
在PHP之中还有一些特殊的常量,以双下划线开始+常量名+双下划线结束,通常会跟随环境变化,用户无法更改。//shift+两次快速的-
常见的魔术常量有
__DIR__:当前执行脚本所在的绝对路径
__FILE__:当前执行脚本所在的绝对路径,带自己文件的名字。
__LINE__:当前所属的行数。
Php数据类型
Php会自动确认数据类型
//php之中数据类型是指的存储本身的数据类型,而不是变量的类型。
Php有8种数据类型
三大类 简单数据类型(1-4) 复合数据类型(5-6) 特殊数据类型(7-8)
八小类 1.字符串 2.整数 3.浮点数4.布尔型5.数组6.对象7.null 8.资源类型
获取php的数据类型
1.var_dump()
如:
<?php
$cxk='2.5';
var_dump($cxk);
?> //显示为string(3) "2.5"
var_dump()会显示出数据类型和占内存空间的长度,再给后面拼接上本身。
补充: var_dump(“$cxk”)可以直接显示变量,//显示为string(3) "2.5"
而 var_dump(‘$cxk’)则不会。//显示为”$cxk”
这里不仅仅是var_dump()会如此显示,其他输出语句也是如此,这里介 绍了单引号与双引号的区别。
var_dump()会显示数据类型与长度与值,一般用作调试。
2.echo gettype($a);
如:
<?php
$wa="ikun";
echo gettype($wa);
?> //显示string
echo gettype()只会显示数据类型
整数型
1.整数至少有一个数字
2.整数不能包含逗号或者空格
3.整数不能有小数点
4.正负整数都可
5.可以用三种格式规定整数:十进制,十六进制(前缀是0x),八进制(前缀是0)
例:
<?php
print ("<hr>");
$x1=100;
echo ($x1);//100
print ("<hr>");
$x2=-100;
echo ($x2);//-100
print ("<hr>");
$x3= 0x1bf52;
echo ($x3);//114514
print ("<hr>");
$x4=01232;//666
echo ($x4);
?>
当用echo输出的时候会变化为十进制
Php还提供了很多函数让其相互转换,例如。
Decbin()十进制转换二进制 //echo decbin(10)
Decoct()十进制转换八进制
浮点型
浮点数是有小数点的数,可以用科学记数法和指数形式去写。
例:
<?php
$X1=2.5;
echo ($X1); //输出结果为2.5
print ("<hr>");
$X2=2.5e3; //=2.5 *10^3
echo ($X2); //输出结果为2500
print ("<hr>");
$X3=2.5e-3; //=2.5 / -10^3
echo ($X3); /输出结果为0.0025
print ("<hr>");
?>
当整数型超过自身存储的大小之后会用浮点型存储
布尔型(逻辑型)
布尔型在程序中有两种状态。
1.真 true 1
2.假 false 0
布尔型常常用于判断。在判断一些数据时候记得数据转换。
Empty():判断是否为空,为空返回true,不是空返回false。
isset():判断存储的变量是否存在。存在返回true,不是返回false。
在实际开发与测试之中,用var_dump()比较多,因为直接用echo输出不了。
数组型
在一个变量中储存多个值,分为一维数组与多维数组,这里浅尝截止。
先了解一下创建数组有这么两种形式
1.$变量名=array(“数组值1”,”数组值2”,”数值值3”);
2.$变量名=[“数组值1”,”数组值2”,”数值值3”];
例:
<?php
$x2=["唱","跳","rap"];
$x1=array("鸡","篮球","背带裤");
var_dump($x1);
print ("<hr>");
var_dump($x2);
//运行结果为
//array(3) { [0]=> string(3) "鸡" [1]=> string(6) "篮球" [2]=> string(9) "背带裤" }
//array(3) { [0]=> string(3) "唱" [1]=> string(3) "跳" [2]=> string(3) "rap" }
?>
对象
(后面用到类与封装的知识后在讲)
Null(空)
Null数据类型只有唯一的值——null
可以用null去清空变量的数据
例
<?php
$x1="真爱粉";
$x2="小黑子";
echo "$x2","与","$x1"; // 输出结果为 小黑子与真爱粉
print "<hr>";
$x1=null; //真爱粉被清除了
echo "$x2","$x1"; //输出结果为 小黑子
?>
Resource资源类型
等学到数据库在展开来说,先记着有这么个类型
类型转换
在很多条件下,需要指定的数据类型。
Php之中有两种转换方式
- 自动转换
- 强制转换
(要转换的类型)变量
例子:echo “(float)$a”;
其他类型转换数值型的说明
- 布尔类型true为1,false为0.
- 以字母开头的字符串,永远是0,如:ab123,转换后为0,不会是0123.
- 以数字开头的字符串,取到字符串为止。
- 转换为数值时候,不会有两个小数点,取到第二个小数点,后面的数据进行舍弃。
数据类型的判断
通过一组函数来判断变量,如果变量与函数内数据类型相同返回true,不同返回false。
Is _xxx(变量)
//例子: $x=3;
var_dump(is_int($x));
用来获取以及设定数据(变量)的类型
Gettype(变量名):获取类型,得到字符串数据
//例子:echo gettype($x);
Settype(变量名,类型):设定数据类型,与强制转换不同
//例子:$x=0.2;
var_dump ($x); //float(0.2)
settype($x,'String');
var_dump ($x) //string(3) "0.2"
- 强制转换(类型)是对于数据复制的内容进行处理,不会处理原来的数据
- Settype会直接改变数据本身。
Php定界符——eof(heredoc)
以《《《eof开始标记,以eof结束标记
结束标记必须顶头写,独占一行,不能有缩进和空格
在结束标记末尾要有分号
Eof可以用任何其他字符代替,开始与结束标记相同即可,比如常用的大写的ceo代替。
开始标记和结束标记之间的变量可以被正常解析,但函数不可以。
当内容需要内嵌引号(单引号与双引号)时,不需要加转义符。
例:
<?php $x="启动";
echo <<<ikun
“唱”跳:‘篮球’
<hr>
$x
ikun;
?>
Eof还可以嵌套
<?php
$x="启动";
$y=<<<yy
$x
<hr>
元神$x
yy;
echo $y;
?>
Eof内部html会被解析
也就是说在内部写html标签会被浏览器渲染
<?php
$x=<<<ikun
<a href="http://www.bilibili.com">天若有情天亦老</a>
<hr>
<h1>一级标题</h1>
ikun;
echo $x;
?>
php各种运算符
算数运算符
加法运算符
1+2=3
减法运算符
3-2=1
乘法运算符
2*3=5
除法运算符
6/2=3
取余运算符
5%2=1
并置运算符
1.1=11
在除法和取余运算时候被除数不能为0,否则报错
赋值运算符
= X=y 把右边的给与左边的
+= X+=y X=X+Y
-= X-=Y X=X-Y
*= X*=Y X=X*Y
/= X/=Y X/=Y
%= X%=Y X=X%Y
.= X.=Y X=XY
连贯赋值运算
$a=$b=666;
递增递减运算符 //自增运算符
++x 前置递增 先加1在返回值
x++ 后置递增 先返回原值 再递增
--x 前置递减 先减1在返回值
x-- 后置递减 先返回原值 在减一
逻辑判断运算符
等于 x==y 如果x=y则返回true
绝对等于 x===y 如果x=y且他们数值类型相等则返回true
不等于 x!=y 如果x不等于y则返回true
不等于 X<>y 如果x不等于y则返回true
不绝对等于 x!==y 如果x不等于y,或他们类型不相同,则返回true
大于 5>2 如果x大于y,则返回true
小于 2<5 如果x小于y,则返回true
大于等于 x>=y 如果x大于或者等于y,则返回true
小于等于 x<=y 如果x小于或者等于y,则返回true
比较运算:比较两个数字的大小等等,返回结果为布尔类型,满足条件为true,不满足为false。
逻辑运算符
与 && x && y 如果x与y都为true,返回true
或 || x||y x与y有一个返回true ,返回true
非 ! ! x x不为true 则返回true
与 and x and y 如果x与y都为true,返回true
或 or x or y x与y有一个返回true ,返回true
异或 xor X xor Y 如果x和y有且仅有一个为true,则返回true
逻辑运算符的区别
And和&&,or和||的主要区别
1.&&||的优先级更高
2.在一个表达式之中,&&与||优先被执行
例子
$boss = true &&false;
Var _dump($boss); //结果为假,这和好理解,&&两边全为真则真,一假整体为假。
但把&&换成and 后则是另一种结果。
$boss = true and false;
Var_dump($boss); //结果为真true,按照道理来讲and 和&&语义一样。
//当第一个例子之中,&&的比重要比=要高,所以必须要先计算完右边的后才会赋值。
//而第二个例子之中,and的比重较低,$boss直接被赋值为真了。后面的and false就掠过了,成为这句子无效的地方了。
那要就想给他and false加进去可以这样。
Var_dump($boss = true and false);
//boss还是被赋值了true,但是后面的 and false执行了,这个var_dump整体输出就是括号里面的真实值了。
逻辑断路
根据&&与||的特性,有时候会发生断路的情况,翻译一下也就是执行了前面就不管后面的情况。
拿与&&举例子,两个都为真才返回真,那第一个数据为假,那么他就不管后面的了,因为这个已经被判定为假的了。
那如果后面的是一个自加自减的变量,他就没变化了,因为直接给他跳过了。
看猫叔的视频给了几个例子辅助思考。
例子
$apex= 1 && print("凤凰急救包");
echo("$apex"); //输出凤凰急救包1,这个1是print返回的,前面的换成2也是1
但要是把前面的换成0,那就不会是显示出来后面的凤凰急救包。
自己根据之前网上卡pink老师的js课程举一个更加容易懂得的例子。
$x=12;
$apex= 1 && var_dump(++$x);
输出一个13,说明自增了。
然后把1换成0,证明逻辑断路。
$x=12;
$apex= 0 && var_dump(++$x);
Echo($x) /结果x是12,x没有自增,被跳过了。
连接运算符
连接运算:将php中多个字符串拼接起来的一种符号。
. 将两个字符串连接到一起
例子: $a= 'Hello World!';
$b=123;
echo "$a.$b";
.= 将两个字符串连接起来,然后重新赋值给左边。
错误抑制符
有一些错误可以提前预知,但又无法避免,不想让用户看见,可以使用错误抑制符 @
例子: $a=10;
$b=0;
($a/$b); 报错
@($a/$b); 不报错
三目运算符
有三个表达式参与的运算(简单分支结构)
表达式1?表达式2:表达式3:
如果表达式1成立那么执行表达式2,否则执行表达式3.
如果表达式比较复杂建议使用()括起来。
$a=10;
$x=($a<10?100:222);
$y=($a=10?100:222);
echo($x),($y)
条件语句(条件分支)
If语句
当条件成立时候执行语句
例:
If(条件)
{
条件成立时候的代码;
}
示例:
<?php
$x=10;
if($x >= 1){
echo("大于1");
};
?> //页面输出大于1。
If else 语句
例:If(条件)
{当条件为真的时候执行的代码 }
else{除了条件为真外时候执行的代码}
示例:
<?php
$x=10;
if($x >= 100){
echo("大于100");
}
else{
echo("没大于100");
};
//输出结果为——没大于100
If elseif else 语句
例子
if(条件){
条件为真执行的语句
}
elseif(条件){
Elseif条件为真执行的语句
}
else{
其他情况执行的语句
};
实例<?php
$x=10;
if($x >= 100){
echo("大于100");
}
elseif($x >9){
echo("大于九");
}
else{
echo("没大于100");
}; //页面输出大于九
?>
If嵌套语句
If的里面还可以嵌套if elseif else等等。
多层嵌套的if往往会使人逻辑混乱,更容易写出bug。
例子:
<?php
$x=9;
if($x >= 0){
if($x < 11){
echo("大于0,且小于十一");
}
elseif($x >11){
echo("大于0,且大于十一");
}
else{
print("等于11");
};
}
else{
echo("小于0");
};
?>
Switch语句
什么时候时候用switch,当条件单一且固定时候。
例子
Switch(值)
{
Case label 1:
如果值=label 1 那么此段代码将被执行;
break;
Case label 2:
如果值=label 2 那么此段代码将被执行;
break;
Default:
如果值不等于label1或2,那么将被执行;
}
循环
让一段代码反复的执行。
For循环
适合先知道循环多少次的情况下
for(初始值; 条件; 增量)
{
要执行的代码(叫循环体);
}
初始值:定义一个计数器,以便确认执行代码的次数
条件:如果条件为真true循环继续,条件为假false则停下来。
增量:用于递增计数器。
执行的过程。
初始值—》判断条件—》循环体—》增量—》判断条件^—》循环体^—》******
例子:<?php
for($i=0;$i<10;$i+=1){
echo("x");
print("<br>");
};
?>
这将会输出十个x。
注意点:1. 初始值声明后可以不赋值,如上面的$i=0可以直接写$i,也会输出10个x。
2.增量也可以不写(会无限增加,卡死。)
3.初始值和增量可以写多个值,中间用逗号隔开。如上面的($i=0;$i<10;$i+=1)也可以写($i=0,$y=0;$i<10;$i+=1,$y+=1)
While循环
只要指定的条件成立则一直循环代码块,直至条件不成立。
While()
{
要执行的代码。
}
例子:
<?php
$i=0;
while($i<5){
print("$i");
$i++;
};
?>
Do while循环
至少循环一次 然后判断条件,条件成立再次执行。
do
{
循环体
}
while(条件);
continue和break的区别
continue是跳出本次循环,break是跳出这个循环体。
注意:continue跳出循环,包括后面的代码,可以参考逻辑断路,直接进行下一次循环,如果不注意此特性,则容易死循环。
例子
首先看正常情况下
<?php
$i=0;
do
{
print("$i");
$i++;
echo"<br>";
}
while($i<5);
?>
输出为0到4.
然后通过if测试一下break
<?php
$i=0;
do
{
print("$i");
$i++;
echo"<br>";
if($i==2){
print"跳过2";
//continue;
break;
};
}
while($i<5);
?>
输出结果是0到1,”加上跳过2“。
break这样是$i到2就跳过了,输出为跳过2。
接下来看continue;
<?php
$i=0;
do
{
print("$i");
$i++;
echo"<br>";
if($i==2){
print"跳过2";
$i++;
continue;
};
}
while($i<5);
?>
除了2以外正常的输出。
break 2
通过break2可以跳出2层循环。
这个2可以是任何数字,当是数字几就是几层循环。
拓展
在php之中,我们想在其中的代码嵌入html时候除了使用echo和print输出之外,还可以通过特殊的写法,把html的标签扩充到里面。
<?php { ?>
<html标签> </html标签>
<?php } ?>
示例: <?php
echo"xx";
echo ("<hr>");
echo"xx";
?>
<?php{?>
<hr>
<p>xxx</p>
<hr>
<?php}?>
除了用{ 之外,也可以用:endfor。
foreach循环
在数组的底部有介绍。
数组
能在单个变量之中储存多个值,并且根据 键 访问其中的 值。
输出数组
用普通的print与echo直接输出数组只会得到“ Array ”,使用print_r()可以输出数组所有的值。
例:
$ikun=["黑子","真爱粉","反串"];
print_r($ikun); //输出结果为
Array ( [0] => 黑子 [1] => 真爱粉 [2] => 反串 )
数值数组
有两种创建数值数组的方式:
1.$变量名=array(“数组值1”,”数组值2”,”数值值3”);
2.$变量名=[“数组值1”,”数组值2”,”数值值3”];
当需要调用里面的值的时候可以这样。
print($变量名[ 0 ])
变量名【】里面的 键数 代表存入的数值,从零开始对应。
例子:
<?php
$ikun=["黑子","真爱粉","反串"];
print($ikun[0]);//输出黑子
print($ikun[1]);//输出真爱粉
print($ikun[2]);//输出反串
?>
通过键值来指定数组值
当然,也可以通过键值来指定数组值。
$ikun=["黑子","真爱粉","反串"];
$ikun[0]="你干嘛~";
print($ikun[0]);//输出你干嘛
本应该输出“黑子”的值,但是修改后输出“你干嘛”
关联数组
根据上面可以推测,php也可以创造指定的键值与指定的数组值。
$ikun=["黑子","真爱粉","反串"];
$ikun[0]="你干嘛~";
print($ikun[0]); //输出你干嘛
$ikun[66]="你是没见过黑社会郝!";
echo($ikun[66]); //输出你是没见过黑社会郝!
这样创造了ikun数组,66键值对应“你是没见过黑社会郝!”。
键值也可以对应别的,比如把键值改为字母或者别的什么。
$ikun=[]; //创建空数组
$ikun["yyy"]="飞起来!"; //定义键值对应的数组值
echo($ikun["yyy"]); //输出 飞起来
当然,除了在数组外使用 $ikun["yyy"]="飞起来!";,这方法外,也可以通过别的方法来改变对应的键值与数组值。
$数组名{
“黑子”,
“白字”,
“ikun” => “你干嘛~鸭油”
};
通过这种=》可以在数组内部确定键值与其对应的数组值。
获取数组长度的函数 count()
能够输出数组的长度
例子:
<?php
$ikun=["黑子","真爱粉","反串"];
print count($ikun);//输出 3
?>
遍历数组
就是挨个把数组里面的值输出出来。
有两种方法,一种是for循环,一种是
第一种for循环,因为数组的键值默认排序是从0开始,那么利用数组长度函数 count和一个自增变量就可以轻松的遍历数组。
例子:
<?php
$ikun=["黑子","真爱粉","反串"]; //创建数组
for($i=0;$i<count($ikun);$i++){ //创建一个变量i作为计数器,当i小于数组的长度执行内容,执行后对于变量i自增。
echo($ikun[$i]); // 输出数组值,他将会从【0】开始输出,直到条件不成立,那时候将会遍历完整个数组。
print("<br>");
};
?>
但这个会出现一个问题,上面讲过可以自定义键值和对应的数组值,这常常会出一些问题,导致遍历的长度小于实际长度。
例如:
$ikun=["黑子","真爱粉","反串"];
$ikun["xx"]="yyy";
for($i=0;$i<count($ikun);$i++){
echo($ikun[$i]);
print("<br>");
};
这把 $ikun["xx"]="yyy"; 这个值给跳过了,没有输出这个值。很显然i在怎么自增也不会自增成为“xx”。
对于关联数组,我们有其他的方法。
foreach ($数组名 as $变量)
通过foreach ($数组名 as $变量){执行的语句}。 可以把数组里面所有的值依次传输给$变量。($变量每次只保留最后一次传输过来的)
例子:
$ikun=["黑子","真爱粉","反串","ix" => "bag"];
foreach($ikun as $jjxx){
echo"$jjxx";
echo"<br>";
}
这样所有的ikun数组都被输出出来了。
那要是即想要key键值,也想要数组怎么办。
可以通过=>
例子:
$ikun=["黑子","真爱粉","反串","ix" => "bag"];
foreach($ikun as $xx=> $jjxx){
echo"$xx";
echo"$jjxx";
echo"<br>";
}
所有的键值与数组值都被打印出来了。
其中的$xx被赋予了数组的键值,后面的$jjxx被赋予了数组值。
二维数组
也就是一个数组里面还包含数组
例如:
$cxk=array(
array('xx' => 'age','20'),
array('cxk','2.5'),
array('篮球','基尼台没')
);
print_r($cxk);
//运行结果
Array
(
[0] => Array
(
[xx] => age
[0] => 20
)
[1] => Array
(
[0] => cxk
[1] => 2.5
)
[2] => Array
(
[0] => 篮球
[1] => 基尼台没
)
)
多维数组
根据二维数组可知,数组可以多层嵌套
文件包含
在php脚本之中,去将另一个文件包含进来,去合作。
文件包含的作用:
1.:要么使用被包含文件中的内容,实现代码的共享(重复使用) 向上包含(索要)
2.: 要么自己的东西可以给别的文件使用。向下包含(给与)。
文件包含的四种形式
在php之中文件包含有四种形式(两种大形势)
Include:包含文件
Include_once:系统会自动判断是否已经被包含了一次
Require:包含文件
Require_once:与Include_once一样。
Include和require的区别
Include 系统碰到一次执行一次
Include_once 只执行一次
Include和require本质都是包含文件,只有报错提示不一样。
文件包含的基本语法
Include’文件名称’
Include(’文件名称’)
文件加载原理
- 在加载文件时候(include或者request)系统会自动把包含文件的代码嵌入当前文件之中。
2.在哪里加载,对应代码嵌入的位置就是在哪里,在对应的include或者require
3.在php之中包含的文件是单独编译的。
注意php编译过程出错会报错,引入的文件有错误只有当执行到的时候才会报错。
文件加载路径
加载路径分为两大类
1.绝对路径 从根目录开始
2.相对路径 从当前目录开始
文件嵌套包含
a包含b包含c包含a
如上形成循环。
这里注意一下相对路径的问题,当一个文件加载另一个文件之时,那文件的相对路径会发生变化,转变为包含他的文件路径。
函数
基本概念
函数(function),是一种语法结构,将实现某一个功能的代码块封装到一个结构之中,从而实现代码的重复使用。
函数有着几个关键点 function 关键字 函数名 参数(形参和实参),函数体返回值。
函数在编译阶段不执行,只有使用时候才会调用。也就是说下面的haha()可以在定义之前就调用。
函数体:函数内部的所有代码。
返回值:所有函数都有返回值,如果没用return指定,那么函数默认返回为空(null)
基本语法
Function 函数名(参数){
//函数体
//返回值,结果。
}
示例:
function haha(){
echo"篮球";
}
haha(); //输出篮球
函数的命名注意与变量的命名注意类似。
函数形参实参
形参
形式参数,不具备实际意义,在函数定义时使用的参数。
实参
实际参数,具有实际意义的参数,在调用时候使用的参数。
示例:
定义函数
Function cxk($篮球,$基){
Echo $篮球+$基;
}
Cxk(10,20) //输出30
上面的篮球和基就是形参,10,20就是实参
函数改变外部变量
有时候希望用函数改变量的值,那么可以使用&
示例:function($add1,&$app){
}
实参这里必须用变量,因为变量才有内存地址,才会改写。
例子:
function cxk(&$篮球,$基){
$篮球=$篮球*2;
$基=$基*2;
echo $篮球,$基;
}
$a=10; //注意这里是10
$b=20;
cxk($a,$b);
echo $a; //这里就发生了改变,变成了20,实参被形参所修改了
返回值
所有函数都有返回值,如果没用return指定,那么函数默认返回为空(null)
示例:
function cxk($篮球,$基){
return $篮球+$基; //这里返回值给cxk这个函数
}
$两年半=cxk(10,33); //把cxk函数的返回值给与$两年半这个变量。
echo $两年半;
return的出现代表着函数结束,后面的代码不在执行。
示例:function cxk($篮球,$基){
return $篮球+$基;
echo"大碗宽面";
}
$两年半=cxk(10,33);
echo $两年半;
大碗宽面消失了,不再会被输出。
return在文件之中也可以出现,把整个php文件想象为一个大函数,在文件之中时候,同样后面的内容将不会在被解析。
常用系统函数
-
有关输出的函数
- Print() 类似于echo,返回一个值为1。
- Print_r() 与var——dump类似,但不会输出数据类型,只输出值。常见于数组打印。
-
有关时间的函数
- Date() 按照指定格式对应的时间戳,若没有指定格式的时间戳,那默认解释现在的时间戳。从1970年开始计算的秒数。
- 例子:echo date('y年,m月,d日');//24年,10月,18日,解析了我写程序时候的时间。
- echo date('y年,m月,d日',123456); //70年,01月,02日,给date函数一个时间戳,解析出了123456的时间戳对应的y,m,d(年月日)
-
Time() 获取当前的时间戳。
Microtime() 获取微秒级别的时间戳。 - Strtotime() 将特定的字符串变成时间戳,实际开发很常用,几乎囊括所有可能。
例子:echo strtotime(‘tomorrow 10 hours’);
-
有关数学的函数
- Max() :指定参数中最大的值
例子:$a=10; $b=20;
echo max($a,$b);
//因为20比10大,所以输出20
例子2:$ikun=[10,20,30,40];
echo max($ikun);//输出为40,可以筛选出数组中最大的数。
-
- Min :指定参数中最小的值,用法与max一样。
- Rand:产生一个随机整数。rand(int $变量,int $变量)
例子:echo rand(3,9);//结果会是输出3~9之间的一个随机整数。
-
- Mt_rand:使用 Mersenne Twister 算法生成随机整数。速度是rand的4倍
- Round:四舍五入
示例:echo round(3.44),"<br>";//输出为3
echo round(3.54);//输出为4
-
- Ceil: 向上取整。返回不小于 x 的下一个整数,x 如果有小数部分则进一位。
例子:echo ceil(0.60); //1
echo ceil(5); //5
echo ceil(5.1); //6
echo ceil(-5.1); ///-5
-
- Floor:向下取整。返回不大于 x 的下一个整数,x 如果有小数部分则减小1。
例子:echo floor(0.60); //0
echo floor(5); //5
echo floor(5.1); //5
echo floor(-5.1); //-6
-
- Pow:求指定数字的指定指数次的结果。
如pow(2,4)== 2^4 ==2*2*2*2 ==16
-
- Abs:绝对值。
- Sqrt:开x的算术平方根。
从数学角度来说:如100的平方根等于+10与-10,因为+10与-10乘上自身等于100。0的平方根是0,负数没有平方根,因为不论什么数字的平方都不可能是负数。
从编程角度:如果参数 x 是负数,则 sqrt() 函数返回 -1.#IND。
例如:echo sqrt(100); //10
echo sqrt(0); //0
echo sqrt(1); //1
echo sqrt(0.16); //0.4
有关函数的函数
Function_exists() :判定指定函数名字是否存在
示例:
function xx(){}; //创建一个函数
var_dump( Function_exists('a')); //输出为bool(false),因为函数a不存在
echo"<hr>"; //分割
var_dump(function_exists('xx')); //输出为bool(true),函数xx是存在的
Function_get_args() :在自定义函数之中获取所有实参的值,并以数组的形式输出。
示例:function xax($a,$b){
var_dump(func_get_args());
}
xax(1,2,$A,'4');
输出结果为:array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
NULL
[3]=>
string(1) "4"
}
Function_get_arg() :在自定义函数之中获取指定实参的值,并以数组的方式进行输出。
示例:function xax($a,$b){
var_dump(func_get_arg(1));
}
xax(1,2,$A,'4'); //int 2
Function_num_args() :获取当前自定义函数的实参数数量
示例:function xax($a,$b){
var_dump(func_num_args());
}
xax(1,2,$A,'4');
- 有点用,但是没什么用的函数
- __FUNCTION__ 输出当前函数的名字。
作用域
变量,常量能访问的区域
php的三种作用域
全局变量:用户正常写的
局部变量:在函数内部写的
超全局变量。
//理论上说在函数内部不允许调用全局变量
示例:
$a=10;
function cxk(){
echo $a;
}
cxk();//什么也不会输出。
//理论上说全局变量也不允许调用函数内部变量。
示例:
function cxk(){
$a=10;
}
cxk();
echo $a;
超全局变量:系统定义的变量
通过超全局变量的特殊性,我们可以利用$GLOBALS让函数内部访问到全局变量。
$GLOBALS会把所有的全局变量以数组的形式存储到自身,利用这个特殊的性质,可以在函数内部使用全局变量,只需要像是使用数组一样。
var_dump($GLOBALS)可以看见所有的全局变量等。
示例:
$a=10;
function cxk(){
echo $GLOBALS['a'];
}
cxk();//输出10
-
- 通过返回值 return可以实现全局变量访问函数内部,具体例子如+返回值+ 地方的例子
- $global关键字 实现函数内部访问全局变量的一种方式
- 如果global在函数内定义的变量名外部存在,那么直接访问该变量内存空间。
- 如果不存在,将在全局变量的空间内创建一个新的变量。
示例:
Global 变量名 //这时候不可以直接赋值
变量名=值;
function cxk(){
global $ikun;
$ikun=114514;
}
cxk();//这里必须调用一下,不然输出不出来。
echo $ikun;
虽然上述可以实现局部与全局的访问,但通常不建议这样做,一般会使用参数或者常量来实现。
脚本周期:直到脚本运行结束。
函数周期:函数执行结束(函数在栈区单独开辟一个内存运行空间)
函数进阶
静态函数
当多次调用一个函数的时候,希望保存其中的值,这时候可以使用静态函数。
因为根据函数周期,从一个函数被调用,到执行完毕,函数的所有东西都将回收,那重复调用的时候,还是给零开始,有时候希望保存一些数据,这时候静态变量就有用了。
//比如查看当前函数被调用的次数。
静态变量:Static
基本语法:function 函数名(){
//定义变量
Static $变量名=值;//通常定义的时候直接赋值
}
示例:
function cxk(){
$a=1;
static $b=1;
echo $a," ",$b," ";//这里是为了看起来美观,实际上只写变量a与b也 行。
$a++;
$b++;
}
cxk();
cxk();
cxk();
//结果为 1 1 1 2 1 3
可变函数
当一个变量所保存的值是另一个函数的名字时候,那么可以用这个变量的值加上“()”来使用那个函数。
//跟变量那一节的可变变量差不多。
示例:
function cxk(){
echo"只因你太美";
}
$小黑子='cxk';
echo $小黑子; //输出为cxk
echo $小黑子(); //输出为只因你太美
函数回调
一个函数调用另一个函数的过程
示例:
function cxk($hz1,$hz2){
$hz2+=2;
return $hz1($hz2);
}
function lq($ikun){
return $ikun=$ikun/2;
}
echo cxk('lq',5); //注意lq是‘’起来的。
解释:1.首先是执行到 echo cxk('lq',5);,然后把实参带入到cxk函数的形参
2.echo cxk('lq',5);的5会被带入为$hz2,然后加上2
3.这时候返回值给 echo cxk('lq',5);,但是因为可变函数,调用了下面的函数,先不返回值,先对下面的函数进行分析。
4.lq函数是对于自身除以个2,然后返回值给cxk函数,cxk函数这时候在把值给echo cxk('lq',5);,最终输出为3.5。
匿名函数
基本概念:没有名字的函数。
语法:
Function(){
}; //注意引号;
实际开发中会把一个变量名=该函数不然永远无法实现调用。
示例:
$a=function (){
echo("说的道理");
};
$a(); //直接变量+()使用。
闭包;函数内部有一些局部变量,在函数执行之后没有被释放。
//可能是匿名函数,函数内部还有函数等。
伪类型
假的类型,实际在php之中不存在的类型,但是通过伪类型可以帮助程序员更好的查看手册。
Mixed:混合型,可以是多张php类型
Number:任意数值型,整数和浮点数。
也就是说,除了查手册没什么用处。
错误处理
指系统或者用户在对于某些代码进行执行的时候,发现错误就会通过错误处理报告给程序员。
错误分类
1语法错误 用户书写不规范导致的错误,代码不会执行(parse error)
2运行时错误 代码编译通过,但是一些条件不满足(runtime error)
错误代号
1系统错误
E_PARSE:编译错误,代码不会执行
E_ERROR: fatal error 致命错误,会在错误的地方断开
E_WARNING: warning 警告错误,不会影响执行,但可能出现意料的结果
E_NOTICE: notice 通知错误,不会影响代码执行
2 用户错误
用户自定义错误触发的时候
3 其他
所有从错误,开发环境偶尔会使用。
错误显示
在php之中有两种方式来配置错误。
- 在php的配置文件ini里面更改
- Display errors:受否显示错误
- Error reporting :显示什么级别的错误。
- 在写php代码页面更改,在php代码界面的优先级高于ini配置文件。
错误日志
实际开发制作之中不方便直接给用户看报警的错误,不安全不美观。所以使用错误日志只让程序员观看。
1开启日志
在php的ini配置文件之中找到log_errors =on前面的;删掉
2 指定路径
Error log 配置项
在php的配置文件ini之中,找到 error log (后面跟着想要错误日志出现的路径)
例如: error _log = ‘E/CXK/PHP25/error.log’
字符串转义
在计算机通用协议之中,有一些字符有着特殊定义。通常是\+字符,的形式出现。
如\r : //回车。
\n : //新一行
注意,单引号和双引号的对于这里会有区别,单引号可以识别出,双引号无法识别出。
双引号可以解析$ 也就是可以解析变量。
例子:
$a=”飞起来”
Echo “ xx $a yy ” // xx$ayy
Echo ‘ xx $a yy ’ //xx 飞起来 yy
这个样子的 飞起来 会有空格,如何让这空格消失。
Echo ‘xx{$a}yy’ //xx飞起来yy
通过 {} 就可以实现让{}消失。
用函数判断字符串长度
Strlen(变量)
示例:
$cxk=’篮球’;
Echo strlen($cxk);//6 中文字符占据3个字节
因为早期历史遗留问题,多字节的字符串长度问题。
1开启php的ini拓展里面的mbstring。
2mb拓展带来了很多函数,具体使用百度或者实践之中遇到。例如mb_strlen,和strlen差不多。
3mb_strlen可以用于特定的编码来解析占用的字节。
//例如
Mb_strlen($a,’utf-8’)
字符串相关函数
1转换函数:implode() explode( ) str_split( )
Implode:将数组变成字符串
语法:
implode(separator,array)
separator 可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array 必需。要组合为字符串的数组。
示例:
$arr = array('篮球','唱','跳','rep');
echo implode(" ",$arr); //输出结果为 篮球 唱 跳 rep
Explde:将字符串变成数组
语法:explode(separator,string,limit)
separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的数目。
示例:
$str = 'one,two,three,four';
print_r(explode(',',$str));
//Array
(
[0] => one
[1] => two
[2] => three
[3] => four
)
Str_split:将字符串变成数组,按照字节数来变成。
语法:
str_split(string , int)
String :要转换的字符串
Int:按照多少字节分割
示例:
$str = "Hello";
$arr1 = str_split($str);
$arr2 = str_split($str, 2);
print_r($arr1);
//Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
)
Array
(
[0] => He
[1] => ll
[2] => o
)
2截取函数:trim() ltrim() rtrim()
Trim:移除字符串两侧的字符,默认是去掉两边的空格的,也可以指定去除两边的内容
语法:trim(string,charlist)
string 必需。规定要检查的字符串。
charlist 可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符:
"\0" - NULL
"\t" - 制表符
"\n" - 换行
"\x0B" - 垂直制表符
"\r" - 回车
" " - 空格
示例:
$str = "OTTO";
echo $str . "<br>";
echo trim($str,"O");
?>//结果为 OTTO<br>TT 两边的O被去掉了。
Ltrim去除左边的
Rtrim去除右边的
3截取函数:substr() strstr()
Substr:返回字符串的一部分
语法:substr(string,start,length)
string 必需。规定要返回其中一部分的字符串。
start 必需。规定在字符串的何处开始。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾开始的指定位置开始
0 - 在字符串中的第一个字符处开始
length 可选。规定被返回字符串的长度。默认是直到字符串的结尾。
正数 - 从 start 参数所在的位置返回的长度
负数 - 从字符串末端返回的长度
示例:echo substr("Hello world",6);//结果为world
Strstr:从指定位置开始,截取到最后
示例:echo strstr("I love Shanghai! ikun cxk","Shanghai"); //输出为Shanghai! ikun cxk
大小写转换函数 strtolower() strtoupper() ucfirst()
strtolower():把所有字符转换为小写
示例:echo strtolower("Hello WORLD.");//hello world.
Strtoupper():把所有字符转换为大写
示例:echo strtoupper("hello world."); //HELLO WORLD.
Ucfirst():首字符转换为大写
示例:echo ucfirst("hello world!");//Hello world!
查找函数 strpos() strrpos()
Strpos:查找在字符串中第一次出现的位置:
示例:echo strpos("你 是 真 没 见 过 黑 社 会 哈","是");//4
echo strpos("ikun","u");//2
中文占据3个字节,从0位开始算起
Strrpos:查找在字符串中最后一次出现的位置
替换函数 str_replace()
以其他字符替换字符串中的一些字符
示例:
$a='wo shi ikun';
echo str_replace("wo","ni","$a");//ni shi ikun
语法:
str_replace(find,replace,string,count)
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。对替换数进行计数的变量。
补充示例:
$arr = array("blue","red","green","yellow","red","red");
print_r(str_replace("red","pink",$arr,$i));
echo "替换数:$i";//替换数:3
//因为在上面的例子中red被替换了3次
格式化函数 printf() sprintf()
Printf/sprintf:格式化输出语句。
示例:
$a="蔡徐坤";
$b=2.5;
printf("大家好,我是%s,练习篮球%f年",$a,$b) //大家好,我是蔡徐坤,练习篮球2.500000年
语法:
printf(format,arg1,arg2,arg++)
format 必需。规定字符串以及如何格式化其中的变量。
可能的格式值:
%% - 返回一个百分号 %
%b - 二进制数
%c - ASCII 值对应的字符
%d - 包含正负号的十进制数(负数、0、正数)
%e - 使用小写的科学计数法(例如 1.2e+2)
%E - 使用大写的科学计数法(例如 1.2E+2)
%u - 不包含正负号的十进制数(大于等于 0)
%f - 浮点数(本地设置)
%F - 浮点数(非本地设置)
%g - 较短的 %e 和 %f
%G - 较短的 %E 和 %f
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
附加的格式值。必需放置在 % 和字母之间(例如 %.2f):
+ (在数字前面加上 + 或 - 来定义数字的正负性。默认地,只有负数做标记,正数不做标记)
' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。)
- (左调整变量值)
[0-9] (规定变量值的最小宽度)
.[0-9] (规定小数位数或最大字符串长度)
注释:如果使用多个上述的格式值,它们必须按照上面的顺序进行使用,不能打乱。
arg1 必需。规定插到 format 字符串中第一个 % 符号处的参数。
arg2 必需。规定插到 format 字符串中第二个 % 符号处的参数。
arg++ 可选。规定插到 format 字符串中第三、四等等 % 符号处的参数。
sprintf与printf类似
其他 str_repeat() str_shuffle()
str_repeat():把字符串 "Shanghai " 重复 5 次
示例:
echo str_repeat("ikun",3); //ikunikunikun
Str_shuffle() :随机地打乱字符串中的所有字符
示例:
echo str_shuffle("Hello World"); //dWlleoorHl||eWdllorl Ho||l WelHldoor
数组排序函数
排序函数:按照ascll码进行比较。
1.Sort:顺序排序
示例:
$a=array(0,5,2,6);
$b=sort($a);
//或者直接写sort($a);
print_r($a);
//输出结果是
/*Array
(
[0] => 0
[1] => 2
[2] => 5
[3] => 6
)
把数组的值从小到大更改了顺序
2.Rsort:逆序排序
//与sort用法一样,不过是大小排序的值相反
3.asort:顺序排列,保留引索值
例子:
$a=array(1,14,51,4);
print_r($a);
asort($a);
print_r($a);
//运行结果
Array
(
[0] => 1
[1] => 14
[2] => 51
[3] => 4
)
Array
(
[0] => 1
[3] => 4
[1] => 14
[2] => 51
)
也就是说索引值没变,但是顺序变了。
Arsort:逆序排列,保留引索值
Ksort:按照键名对关联数组进行升序排序
示例:
$a=array("Steve"=>"56","mark"=>"31","Bill"=>"60");
print_r($a);
ksort($a);
print_r($a);
//运行结果
Array
(
[Steve] => 56
[mark] => 31
[Bill] => 60
)
Array
(
[Bill] => 60
[Steve] => 56
[mark] => 31
)
Krsort:按照键名对关联数组进行逆序排序
Shuffle:随机打乱数组,用法与上述一样。
指针函数:
Reset():重置指针,回到首位
End():重置指针,回道末尾
Next():将数组内部的指针向前移动一位
Prev():将数组内部的指针向后移动一位
Current():获取当前指针对应的元素
Key():获取当前指针对应的引索值
示例1:
$a=array('ikun','cxk','s');
echo current($a);//ikun
echo key($a);//0
示例2:
$a=array('ikun','cxk','s');
echo current($a);//ikun
next($a);
echo(current($a));//cxk
prev($a);
echo(current($a));//ikun
示例3:
$a=array('ikun','cxk','s');
echo current($a);//ikun
end($a);
echo current($a);//s
reset($a);
echo current($a);//ikun
注意事项:当通过next或者prev导致离开了数组,这时候就无法通过上一位下一位回来了。只能用end或者reset重置了。
其他数组相关函数
Count:统计数组之中值的数量
示例:
$a=array(1,12,14,5,115);
echo count($a);//5 从1开始数。
Array_push():从数组之中加入一个元素。数组后面。
示例:
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);//这时候上面的“blue与yellow都进去了”
Array_pop();从数组之中取出一个元素。数组后面。
示例:
$a=array("red","green","kun");
print_r($a);
array_pop($a);
print_r($a);//这时候kun就被删掉了
Array_shift:从数组之中取出一个元素。数组前面。
示例:
$a=array("red","green","kun");
print_r($a);
array_shift($a);
print_r($a);//这时候red就被删掉了,引索0也变成了green
Array_unshift:从数组前面增加一个元素。
示例:
$a=array("red","green","kun");
print_r($a);
array_unshift($a,"小黑子");
print_r($a);//这时候red前面会出现一个小黑子,小黑子的索引值是0
Array_reverse():把数组元素翻过来。
示例:
$a=array("red","green","kun");
print_r($a);
print_r(array_reverse($a));//数组的输出结果倒过来了,kun变成了索引值0
print_r($a);//他是不对数组进行修改的
In_array():判断数组之中存在某个元素吗
例子:
$a=array("red","green","kun");
echo in_array("red",$a);//返回了1,也就是存在,不存在的不反
回任何
例子2:
$a=array("red","green","kun");
if(in_array("red",$a)){
echo("存在");
}
else{
echo("不存在");
}