php 基础视频语法简记
2017-01-07 17:28
190 查看
<?php echo "hello world"; ?> <? //short_open_tag = On; ?> <% //asp_tags = On; %> <script language="php"> echo 'php'; </script> 变量定义:如变量a: $a; 可赋值或进行加减乘除。 条件语句: if{} elseif{注意elseif是连在一起写的} else{} echo $s;//打印字符(串) 数组:(主要用于存放一组相关的内容) $a = array(); //空数组 $a = array("老虎", "狮子", "熊猫"); $a = array("1"=>"老虎", "2"=>"狮子", "3"=>"熊猫"); var_dump(数组名);//查看数组元素 foreach($a as $key => $value) { //遍历数组 echo $key;//打印键。 echo $value;//打印值。 } 后端通过什么接收表单数据? $_POST[表单域的名称] $_GET[表单域的名称] eg: $_POST['title'] (title即form里面的name) $_GET['id'] (id即form里面的id) 文件读写操作: 读文件:file_get_contents(文件的地址) 写文件:file_put_contents(文件名,内容,标志) 读文件用get,写文件用put。 不写标志则每次覆盖,要想追加用 FILE_APPEND. 调试 <?php ini_set("display_errors","On");//打开错误提示 error_reporting(E_ALL);//显示错误 var_dump();//打印东西 die(); <=> exit(); //自此开始以下代码不执行,可判断错误的位置。 ?> 一、变量 一-1、变量的声明及注意点 声明: 用一个美元符号后面跟变量名来表示,如 $var。 变量会在首次为其赋值时被创建。 注意点(规则): 一个有效的变量名由字母或者下划线开头,不能以数字开头,后面跟上任意数量的 字母,数字或下划线。 变量名是区分大小写的。 如果变量只声明不赋值,系统会默认有一个初始化的值NULL。 变量的数据类型不是固定不变的! 变量的赋值: 变量的赋值使用赋值运算符“=” 两种赋值方式: 1、传值赋值:$a=$b; a,b各用一块存储空间;a,b值改变互不影响。 2、引用赋值:$a=&$b; a,b共用同一块存储空间;a,b其中任何一个值改变另外一个 值都会改变。 $a;//NULL不建议这样声明变量 var_dump($a);//打印变量a的类型和数值 $a = 10; echo '<br />'; echo $a; 变量的销毁: unset函数来销毁一个变量:unset($a);//销毁$a变量 变量的检测:isset($a); //检测$a是否存在 变量的作用域: 可在脚本的任意位置对变量进行声明。 变量的作用域指的是变量能够被引用、使用的那部分脚本。 php有三种不同的变量作用域: 1、local(局部):函数内部声明的变量拥有local作用域,只能在函数内部进行访问。 2、global(全局):函数之外声明的变量拥有global作用域。 3、static(静态):函数内部使用关键字static声明的变量。 一-2:常量与php表达式 变量是可改变的。常量是不能被改变的。 常量: 内置常量: PHP_VERSION:当前php版本号、PHP_OS:当前操作系统名称、__FILE__:当前php文件名、 __LINE__:当前php文件行数。 自定义常量: define("zzb",'职坐标');//常量名:zzb,常量值:职坐标。 常量默认为大小写敏感,且不能重复定义。 常量定义规则和变量一致,传统上常量标识符总是大写的。 常量不能被销毁,这点与变量不同。 //系统内置常量的使用 echo PHP_VERSION,'<br />';//','表示后面紧跟着输出。 echo PHP_OS,'<br />'; echo __FILE__,'<br />'; echo __LINE__,'<br />'; PHP表达式:是php最重要的基石,几乎所写的任何东西都是一个表达式。简单但却最精确的 定义一个表达式的方式就是“任何有值的东西”。 $a = 5; $sum = 10+5; $ret=abs(-5);... 一-3:PHP的数据类型 标量数据类型:(整型,浮点型,布尔型,字符串) 复合数据类型:(数组,对象) 特殊数据类型:(空值,资源型) 整型表示一个有符号整数(php不支持无符号整数) 浮点型表示一个浮点数(双精度数或实数),理解为小数即可。 浮点数的字长和平台相关,尽管通常最大值是1.8e308并具有14位十进制数字的精度(此限制很重要!) 小数的精度从左边开始第一个非0的数字算起。 比如 0.12345678901232(14位,忽略后面)2222; 0.0012345678901232(14位,忽略后面)2222 精度14位后的第15位要进行四舍五入。 如果给php变量赋值的整形数值大于php中默认的最大的值,那么将会被php解释为浮点型,是自动转换的。 强制转换类型,语法:(类型)变量 如:$a = 10; var_dump($a); var_dump((float)$a);//输出$a的类型和值。 布尔值也叫真假值,使用关键字TRUE或FALSE。不区分大小写。 以下为返回false的变量 $a=false; $a=FALSE; //不区分大小写 $a=(boolean)0;//整型数值0 $a=(boolean)0.0;//浮点数0.0 $a=(boolean)''; //空字符串 $a=(boolean)'0'; //0字符串 $a=(boolean)array(); //空数组 $a=(boolean)new stdClass(); //空对象,仅在PHP4.0中等价于FALSE. $a=(boolean)null; //特殊数据类型NULL. var_dump($a); ==> boolean false. @var_dump((boolean)$b);//未定义的变量$b. ==> boolean false. 其余皆返回true. 字符串(string):由一系列的字符组成(一个字符占用一个字节)。 字符串常见的定义方法: 1、单引号 // $a='Hello world'; 2、双引号 // $b="Hello world"; $str = 'Hello world \'';//用反斜线进行转义。 单双引号里面可以有除了自身定义方式以外的另外一个引号,即单引号定义的字符串里可以直接输出双引号, 反之亦然! $a = 100; $b="hello world"; var_dump($a,$b);//打印多个变量 PHP运算符 1、算术运算符(可理解为数学运算) 注意点: 1-1:除法运算符总是返回浮点数。只有在两个操作数都是整数并且正好能整除,这时它返回一个整数; 1-2:取模运算符的操作数在运算之前都会转换成整数(除去小数部分); 1-3:取模运算符 % 的结果和被除数的符号(正负号)相同。 判断两个数是否能整除时,这两个数必须是整数! 前加:++$a; 后加:$a++; 前减:--$a; 后减:$a--; 简化运算符: 左加:$a += $b; <=> $a = $a + $b; 左减:$a -= $b; <=> $a = $a - $b; 左除:$a /= $b; <=> $a = $a / $b; 左取模:$a %= $b; <=> $a = $a % $b; 赋值运算符“=”,表示把等式右边的值赋予左边的运算数。 等于:$a == $b; 全等:$a === $b; 不等:$a != $b;<=>$a<>$b; (类型转换之后进行比较是否相等) 不全等:$a !== $b;值不同或类型不同。 小于:$a<$b; 大于:$a>$b; 大于等于:$a >= $b; 小于等于:$a <= $b; 逻辑运算符: 逻辑与:$a and $b; 逻辑或:$a or $b; 逻辑异或:$a xor $b;($a和$b任一为TRUE但不同时) 逻辑非:!$a; 逻辑与:$a && $b; 逻辑或:$a || $b; ||的优先级比or高,比=高;=的优先级高于or; &&的优先级比and高,比=的优先级高;=的优先级高于and。 如:$a = false || true;=>true. $b = false or true;和$c = true and false;=>true; 字符串运算符: 1、连接运算符(“.”),它返回其左右参数连接后的字符串; 2、连接赋值运算符(“.=”),它将右边参数附加到左边参数之后。 如:$a="hello"; $b=$a."world"; =>$b="hello world"; $a="hello"; $a.="world"; =>$a="hello world"; 三元运算符: 表达式(expr1)?(expr2):(expr3); 三大流程控制: 顺序控制和分支控制 顺序控制:让程序顺序地执行。 分支控制有3种: 1、单分支:只有一种选择的分支结构语句。 语法: if(条件表达式){ 代码段; } 条件表达式的值会被自动转换为布尔值,当为true时,代码段被执行。 2、双分支:两种选择,非此即彼。 语法: if(条件表达式){ 代码段1;//条件表达式为true时执行 }else{ 代码段2;//条件表达式为false时执行 } 3、多分支:有多种选择的分支结构语句,多分支有两种语句结构为if else 和 switch case。 if else 语法: if(条件表达式1){ 代码段1; }else if(条件表达式2){ 代码段2; }else{ 代码段3; } 分支:是只能选一个的意思。 在PHP中else if 和 elseif 是同样的效果!! 注意:else if 语句可以有多个,else 语句可以没有。 switch case 语法: switch(条件表达式){ case 值1: 代码段1; break; //跳出switch ... case 值n: 代码段n; break;//跳出switch default: 不存在值时的代码段; break;//跳出switch }. switch可以使用的数据类型可以是:整数、小数、字符串、布尔型、null. switch case 穿透 break;//跳出switch 没有break的情况下,是无条件执行的(前面有个case成立)。 default放的位置不重要(都是最后才被执行),但是如果不是在最后一个判断则要加上break。否则会出现case穿透现象。 循环控制:循环地执行代码。 循环的四个基本要素: 1、循环初始值; 2、循环条件; 3、循环体代码; 4、步长(循环体代码执行后要执行的代码) 1、for循环 for(循环初值1;循环条件2;步长4){ 语句;//循环体3 } 特点:执行顺序为1234. //循环省略初始值,如果变量未被初始化,会有一个警告,若要省略,需之前先定义并赋上初值。 //不允许省略循环条件,不然会导致死循环。 //省略循环体即空循环无意义。 //省略步长会导致一直执行该循环体语句固定不变,导致死循环!若要省略则把步长放到循环体后面。 2、while循环 语法: while(循环条件){ 语句;//循环体 步长; } 特点:先判断循环条件再决定是否执行循环体代码。 3、do while循环 do{ 语句;//循环体 步长;//改变循环条件 }while(循环条件); 条件:无论如何先执行一次,再根据循环条件判断是否继续执行循环体代码。 4、break/continue/goto跳出循环 break 结束当前for/while/do while或者switch结构的语句执行。 break 可以接受一个可选的数字参数来决定跳出几重循环。 如:break 2;=>跳出外两层循环。 continue:在循环结构中用来跳过本次循环,继续执行下一次循环。 continue可接受一个可选的数字参数来决定跳过几重循环到循环结尾。 continue后面没任何代码时,它的存在就无意义。 基本不用goto语句,进制PHP5.3及以上版本有效。 goto a; //要跳转到的一个标识符位置。 echo 1; a: //定义一个goto的标识符位置 echo 2; 执行结果:2. PHP函数: 1、PHP函数介绍 函数的概念:是有特定功能的代码段。 分类:系统内置函数和自定义函数。 理解:可以把某些常用而特定的功能写一个函数,当我们想实现这个功能时, 可以直接调用这个函数来完成。 使用函数的好处: 控制程序设计的复杂性; 提高程序的可靠性; 提高编程的开发效率; 提高程序的可维护性; 提高程序的重用性。 自定义函数: 函数的声明 function 函数名([arg1],[arg2],...,[argN]){ ...函数体功能代码段... return 返回值; //可有可无(看需要而定) } 参数的传值方式:按值传参和引用传参。 参数可以有默认值,默认值必须是常量表达式,不能是变量,类成员或者函数调用等。 PHP函数支持可变数量的参数列表。 func_num_args():返回调用函数时传递的参数数量; func_get_arg() :返回参数列表的某一项;(括号内写下标,从0开始) func_get_args():返回一个包含函数参数列表的数组。 函数的特性: 函数名命名与变量、常量命名规范相同; 函数名不区分大小写; 函数名必须是唯一的,即函数名不能和已经存在的函数重名; 函数不会自己发挥作用,只有在调用的时候才会执行并发挥作用; 函数可以有返回值,但只能有一个返回值,返回值可以是任何PHP支持的数据类型; PHP支持可变函数,它的本质是可变变量。 函数的动态调用: 函数只声明不会起作用,只有在调用的时候才会起作用。 按值传参不会改变外部变量;(&)引用传参会改变外部变量的值。 function t(){} $fun = 't'; var_dump($fun());//相当于调用t(); $fun = 't' <=> t(); 变量中的可变变量 $h = 'hello'; $hello = 'hello world'; echo $h,'<br />';//hello. echo $$h,'<br />';//hello world. $$h <=> $($h<=>hello) => $hello => hello world. 函数内的局部变量 1、局部变量(local):函数内部声明的变量。 2、局部静态变量(static):函数内部使用关键字static声明的变量。静态变量的值不能 是表达式的值,只能是标量值。 变量知识补充: 全局变量(global):在全局声明的变量,全局有效。 变量的销毁和检测。 $a = 100; function test(){ global $a; //表明这个变量$a是外部全局变量$a.(函数内部不能直接访问外部变量) echo $a; //100. } function test(){ $a = 100; static $num = 10;//静态局部变量,它的值只能是标量值 //static $n = $a;//报错,因为$a是一个变量而非标量。 $a++; $num++; echo '$a=',$a,'$num=',$num,'<br />'; } test();//$a = 101,$num = 11 test();//$a = 101,$num = 12 test();//$a = 101,$num = 13 /* *普通局部变量,在函数调用时,都会进行初始化。 *静态局部变量,在函数首次调用时,会进行初始化,它可以用做计数器。 */ $a = 100; $b;//不推荐这样定义。 var_dump(isset($a));//boolean true. 检测变量是否设置值 var_dump(isset($b));//boolean false. unset($a);//销毁$a变量 var_dump(isset($a));//boolean false. 包含文件 *include 如果引入文件有错误,代码尽可能地往下执行。 *require 如果引入文件有错误,代码立即终止执行。 *include_once, require_once 仅引入文件一次。 include 'fun.php'; //相当于把fun.php的代码复制在此行。 include 'fun.php';//所以会报错因为重复定义! include_once 'fun.php';//include_once会检测当前是否已包含这个文件。 include_once 'fun.php';//已经包含fun.php 所以此行代码不会执行。 字符串 一、定义字符串详解 1、单双引号定义字符串 双引号定义的字符串会对PHP变量及特殊的字符进行解析,单引号定义的字符则不会 解析PHP变量和特殊字符。 \\:反斜线; \$:美元符号; \":双引号。 $school = '职坐标'; $out = "我在 $school \\ \$ \"努力\" 学习PHP.";//双引号定义的字符串,$school会被解析成"职坐标". echo $out,'<br />';=>我在 职坐标 \ $ "努力" 学习PHP. $out = '我在 $school \ $ \'努力\' 学习PHP.';//单引号定义的字符串,$school变量不会被解析. echo $out,'<br />';=>我在 $school \ $ '努力' 学习PHP. 2、Heredoc 结构就像是没有使用双引号的双引号字符串。 定义语法 <<< 标识符名称 //此处必须是单独成行。 要定义的字符串 标识符名称; //必须单独成行,不能缩进。结束有且仅可以有一个分号。(分号后不能有任何字符包括空格) heredoc 定义的字符串,会解析PHP变量和特殊字符。 eg: $name = '职坐标'; echo <<< EOT //单独成行,EOT是随意定义的标识符。 我在 "$name" 学习PHP, 此处应该是打字符'A':\x41 //单独成行(要换行),标识符结束前后不能有任何字符,包括空白字符。 EOT; nowdoc:定义的字符串,不会解析PHP变量及特殊字符。 Nowdoc结构是类似于单引号字符串的。Nowdoc结构很像heredoc结构,这种结构很适用于嵌入PHP代码或其它大段 文本而无需对其中的特殊字符进行转义。 定义语法: <<< '标识符名称' //此处必须是单独成行(换行) 要定义的字符串 标识符名称; //必须单独成行,不能缩进。结束有且只可以有一个分号。 eg: $name = '职坐标'; echo <<< 'EOT' 我在 "$name" 学习PHP, 此处应该是打字符 'A': \x41 EOT; 变量解析说明 当PHP解析器遇到一个美元符号($)时,会组合尽量多的标识以形成一个合法的变量名。 可以用花括号来明确变量名的界限。 由于{ 无法被转义,只有 $ 紧挨着 { 时才会被识别。可以用 {\$ 来表示字符串 {$。 $str = "hello"; $str1 = "he"; echo "the string is $str <br />";//the string is hello解析的变量是$str. echo "the string is $str1 <br />"//PHP遇到$符号,会尽可能往后找更多的字 符来组成PHP变量,解析变量是$str1. echo "the string is $str11 <br />";//解析的变量是 $str11 这个变量但并未 定义所以报错。 //利用花括号来界定要解析的PHP变量 echo "the string is {$str}11 <br />";//要解析的变量是$str. <=>echo "the string is ${str}11 <br />";//要解析的变量是$str. echo "the string is \${str}11 <br />"//要输出${ echo "the string is {\$str}11 <br />"//要输出{$ 字符串常用操作函数 字符长度函数 int strlen(string $str) 返回字符串的字节长度 mixed mb_strlen(string $str [,string $encoding]) $encoding 参数为字符编码。 如果省略,则使用内部字符编码。返回具有某编码的字符串所包含的字符数。 strlen:返回的是字符串所占字节长度。 mb_strlen:返回的是在某个编码下,字符串所占的字符数。 $str = "hello"; $str1 = '易建联'; var_dump(strlen($str));//int 5获取字符串长度,每个英文字符占一个字符。 var_dump(strlen($str1);//int 9三个中文字符,每个字符占3个字节(utf-8)编码。 var_dump(mb_strlen($str));//int 5(不指定编码则默认情况是使用内部编码。) var_dump(mb_strlen($str1));//int 9 var_dump(mb_strlen($str,'GBK'));//int 5 var_dump(mb_strlen($str1,'GBK'));//GBK编码下,每个中文字符占2个字节 9/2=4...=>5. var_dump(mb_strlen($str,'UTF8'));//int 5 var_dump(mb_strlen($str1,'UTF8'));//int 3. UTF8编码 strlen=9 9/3=3. var_dump(strlen(''));//int 0 var_dump(strlen($str,'a'));//指定不存在编码时返回false。 查找字符位置函数 查找字符串首次出现的位置(从$offset开始查找$search在$str第一次出现的位置) strpos($str,$search[,int $offset = 0]) 此函数区分大小写。 stripos($str,$search[,int $offset = 0])此函数不区分大小写。 从$offset开始查找$search在$str中的最后一次出现的位置。 strrpos($str,$search[,int $offset = 0]) 此函数区分大小写。 strripos($str,$search[,int $offset = 0])此函数不区分大小写 需要注意:不能用 返回值==false 来判断是否找到字符(0==false),必须使用全等 === 来判断是否查找到字符。 字符串替换函数 从$str中查找$search用$replace来替换。 str_replace($search,$replace,$str[,int &$count]) 此函数区分大小写 str_ireplace($search,$replace,$str[,int &$count])此函数不区分大小写 $count 是替换次数。 strtr($str,$search,$replace) 这个函数中replace不能为"". 替换字符串的子串 substr_replace($str,$rep,$start[,$length]) $str原始字符串,$rep替换后的新字符串, $start起始位置,$length替换的长度。 字符串截取函数 从$str中$start位置开始提取[length长度的字符串]。 substr($str,int $start [,int length])//第三个参数默认不传的话,默认截取到结束。 查找字符串的首次出现 strstr($str1,$str2) 从$str1搜索$str2并从它开始截取到结束字符串。 strstr($str1,$str2,true) 表示往查找到的位置往前截取。 stristr($str1,$str2)功能同strstr,只是不区分大小写。 查找指定字符在字符串中的最后一次出现并截取 strrchr(string $str,mixed $search) 字符串分割、连接、反转函数 把$str按$len长度进行分割返回数组 str_split($str,$len) 把$str按$search字符进行分割返回数组,$limit表示返回数组最多包含的元素。 split($search,$str [,int $limit])//被explode取代。 explode($search,$str [,int $limit])//$limit为分割后的数组元素个数。 将一个一维数组的值转化为字符串 implode(string $glue,array $pieces) 字符串反转 strrec($str) 去除、增加空格函数 去除字符串首尾处的空白字符 string trim(string $str [,string $charlist])//去除两边空格 string ltrim(string $str [,string $charlist])//去除左边的空格 string rtrim(string $str [,string $charlist])//去除右边的空格 将字符串分割成小块 string chunk_split(string $body [,int $chunklen = 76 [, string $end = "\r\n" ]]) eg: $str = "abcdefg"; var_dump(chunk_split($str,2,' '));//每两个字节长度切割用 ' ' 连接起来。 =》string 'ab cd ef g ' (length=11) 使用另一个字符串填充字符串为指定长度,默认填充空格字符。 str_pad(string $str,int $pad_length) var_dump(str_pad($str,10)); //默认填充的是空白字符=>string 'abcdefg 'length=10. var_dump(srr_pad($str,10,'#'));//用'#'来填充=>string 'abcdefg###' length=10. HTML代码、数据库安全处理有关函数 使用反斜线引用字符串: addslashes(string $str) 反引用一个使用 addcslashes() 转义的字符串: stripslashes(string $str) 将字符串中一些字符转换为HTML实体: htmlentities() 和 htmlspecialchars() 将HTML实体转换为字符: html_entity_decode() 和 htmlspecialchars_decode() $str = "this's a test string."; var_dump(addslashes($str));//对特殊字符进行转义。=>string 'this\'s a test string.' var_dump(get_magic_quotes_gpc());//如果返回true则表明PHP会自动转义由POST/GET传递 过来的特殊字符。 $str1 = '<a href="01.php">01.php</a>'; echo $str1,'<br />'; //01.php $str2 = htmlspecialchars($str1);//(此函数还有第二个参数自行查阅。) echo $str2;//<a href="01.php">01.php</a> echo htmlspecialchars_decode($str2);//01.php 比较字符函数 字符串比较大小,如果 str1 小于 str2 返回 -1;如果 str1 大于 str2 返回 1;如果两者相等返回0. int strcmp($str1,$str2) 区分大小写 int strcasecmp($str1,$str2) 不分大小写 字符大小写转换函数 字符串转换为小写:strtolower($str) 字符串转换为大写:strtoupper($str) 将字符串的第一个字符转换为大写:ucfirst($str) 将每个单词的首字母转换为大写:ucwords($str) PHP数组 一、PHP数组创建与修改 1、PHP数组介绍 PHP中的数组是一个键值的映射,值可以是任意一种类型,包括另一个数组。 根据数组键名数据类型的不同进行分类: 索引数组:以数字作为键名的数组; 关联数组:以字符串或数字和字符串混合为键名的数组。 根据数组维数的不同进行分类: 一维数组:只能保存一列数据内容。 多维数组:可以保存较复杂的数据内容。 创建数组常用方法: $arr = array(key=>value[,key=>value]...)//array结构创建数组 $arr[] = value; //初始化方式创建数组 $arr = [key=>value,...]; //快速创建数组(PHP5.4) 数组键值特点: 1.键可以是字符串,也可以是整型。 2.键如果指定,则以指定为准;键如果没指定,则按该单元前已存在的最大的整数键值增1, 形成整数键值。 3.如果后续指定的键与前面的键重复,则值会覆盖前面值。 数组元素的访问、追加、修改、检测、删除 访问:$arr[key] 追加:$arr[key] = value; 修改:$arr[key] = newValue; 检测:isset($arr[key]);//若key已被设置则返回true,否则返回false. 删除:unset($arr[key]);//删除键为key的元素。 //创建数组 1、array结构方式创建数组 $arr = array('name'=>'张三','age'=>22); print_r($arr);//print_r 一般用来打印数组。 //var_dump($arr); 2、初始化方式创建数组 $arr1['name'] = '张三'; $arr1['age'] = 22; print_r($arr1); 3、快捷方式创建数组【phpVersion >= 5.4】 $arr2 = ['name'=>'张三','age'=>22]; print_r($arr2); $arr2[] = '男'; //无整型键值时默认键值为0.即$arr2[0]='男'; $arr2[100] = 'test'; //100是一个整型数值。 $arr2[] = '测试';//键值为:100+1=101. 索引数组和关联数组 $a = [1,2,3,4,5]; var_dump($a);//索引数组(键值都是数字) $b = ['name'=>'test',1,3]; var_dump($b); //关联数组(键值含字母和数字) 一维数组和多维数组 $arr [ 'a' => [1,2,3,'aa'=>[11,22,33]], 'b' => [4,5,6] ]; $temp = $arr['a']['aa'];//访问到键为a中数组中的键为aa的元素。 $temp[0]=>11;//0->11,1->22,2->33. 多维数组的访问:有多少个维度,就要有多少个[],否则返回的还是一个数组。 $arr['b'][0];//4. 数组的遍历: 1、foreach 遍历数组 foreach($arr as [$key=>]$value){//[不需要打印键值时可省略] //遍历操作; } 2、for循环遍历数组(只能用于遍历索引数组!) $len = count($arr);//计算数组长度 for($i=0;$i<条件;$i++){ //遍历操作; } 3、list操作配合each函数遍历数组 list-把数组中的值赋给一些变量; each-返回数组中当前的键值对并将数组指针向前移动一步。键值对被返回为4个单元的数组, 键名为0,1,key和value。单元0和key包含有数组单元的键名,1和value包含有数据。 while(list($key,$value) = each($arr)){ echo $key.'=>'.$value."<br />"; } $arr = ['name'=>'李四','age'=>22,'sex'=>'男']; print_r($arr); //list each var_dump(each($arr));//返回当前数组中键值对,执行完成后,数组指针后移,;name'=>'李四',指针此时指向age。 var_dump(each($arr));//'age'=>22,此时指针指向 sex。 var_dump(each($arr));//'sex'=>'男',此时数组已经到末尾了。 var_dump(each($arr));//false. list($key,$value) = each($arr); //将each返回的键赋值给$key,值赋给$value. echo $key,'=>',$value,'<br />'; 第一次执行时返回:name=>李四 使用while循环配合list each来界定是否到达数组元素末尾: while(list($key,$value) = each($arr)){ echo $key,'=>',$value,'<br />'; }//name=>李四 age=>22 sex=>男。 数组的遍历: 数组的游标操作 key():从关联数组中取得键名; 以下几个都是返回值: current():返回数组中的当前单元的值,如果内部指针指向超出了数组最后一个单元将返回FALSE。 reset():将数组的内部指针指向第一个单元。 next():将数组的内部指针向前移动一位。 prev():将数组的内部指针倒回一位。 end():将数组的内部指针指向最后一个单元。 数组的游标操作遍历数组: while($value = current($array)){ echo key($array),'=>',$value.'<br />'; next($array);//让数组指针向前移一位,也就是指向下一个元素,若未到数组末尾,返回数组下一个元素的value值。 } PHP数组常用操作函数: $arr = [1,3,5,8,3,8,1]; count - 计算数组中的单元数目; implode - 将一个一维数组转换成字符串; var_dump(implode(' ',$arr));//(转换的对象是数组中的值)第一个参数是拼接数组值的字符,第二个参数是要转换的数组。 =》string '1 3 5 8 3 8 1' (length=13) //explode explode(' ','1 3 5 8 3 8 1');//将字符串转换为数组。按第一个参数分隔。 in_array - 检查数组中是否存在某个值; in_array(100,$arr);//判断100是否在数组$arr中,是返回true,否返回false. array_key_exists - 检查给定的键名或索引是否存在于数组中; array_key_exists(100,$arr);//false 存在返回true,不存在返回false. array_keys - 返回数组中部分的或所有的键名;返回的是一个索引数组。 array_keys($arr);//返回$arr数组中所有的键,返回的是一个索引数组。 array_keys($arr,8);//表示返回值为8的所有的键值,默认不区分类型! array_keys($arr,8,true);//第三个参数表示严格区分数值和类型。 array_values - 返回数组中所有的值。(索引数组) array_values($arr);//返回的是数组中值的数组。返回的是索引数组。 $a = ['name'=>'李四','age'=>22,12,56]; print_r(array_values($a));//Array([0]=>李四 [1]=>22 [2]=>12 [3]=>56) $arr = [1,3,5,8,3,'8',10]; array_pop - 将数组最后一个单元弹出(出栈)。是引用传参,弹出数组中最后那个元素,返回的是最后一个元素的值。 var_dump(array_pop($arr));//int 10. array_push - 将一个或多个单元压入数组的末尾(入栈)。 array_push($arr,'a');//向数组末尾追加1个或多个元素。 array_push($arr,'a','b');//向数组末尾追加2个元素。$arr=[1,3,5,8,3,'8',10,'a','b']; array_shift - 将数组开头的单元移出数组。 array_shift($arr);//弹出数组第一个元素,返回的也是第一个元素的值。[1] array_unshift - 在数组开头插入一个或多个单元。 array_unshift($arr,'a');//向数组首部追加一个元素或多个元素 array_unshift($arr,'a','b');//['a','b',...] 如果数组为空,使用array_pop,array_shift时,将会返回null. $s = []; var_dump(array_pop($s));//null var_dump(array_shift($s));//null array_unique - 移除数组中重复的值。 $arr = [3,5,8,3,'8',10]; print_r(array_unique($arr));//Array([0]=>3 [1]=>5 [2]=>8 [5]=>10)不区分字符串数值和整型数值。 array_chunk - 将一个数组分割成多个。 $arr = [3,5,8,3,'8',10]; array_chunk($arr,3);//数组切割,切割成一个二维数组,第二个参数表示要切割的长度,返回的是切割后的数组。 array_chunk($arr,3,true);//第三个参数为true表示保持原来的键值对应关系。 shuffle - 将数组打乱。引用传递参数。 $arr = [3,5,8,3,'8','name'=>'张三']; array_search - 在数组中搜索给定的值,如果成功则返回相应的键名。 var_dump(array_search(5,$arr));//返回的是键值 int 1. var_dump(array_search(8,$arr));//int 2 var_dump(array_search('8',$arr));//int 2 var_dump(array_search('8',$arr,true));//int 4(第三个参数如果为true则严格区分数据类型) array_slice - 从数组中取出一段。 array_reverse - 返回一个单元顺序相反的数组。 array_reverse($arr);//$arr = ['8',3,8,5,3]. array_change_key_case - 返回字符串键名全为小写或大写的数组。 array_diff - 计算数组中所有值的和。 array_merge - 合并一个或多个数组。 $arr1 =['name'=>'李四',8,3]; $arr2 =array_merge($arr,$arr1);//返回的是合并后的数组。[3,5,8,3,'8','李四',8,3] array_merge 如果合并的数组有相同的字符串键名,则后面的数组元素会覆盖前面的数组元素,而整型键值不会被覆盖。 PHP数组常用操作函数: $arr = [4,2,12,88,7]; sort - 对数组正向排序; sort($arr);//对数组按值正向排序,是会重建索引关系。 [0]=>2,[1]=>4,[2]=>7,[3]=>12,[4]=>88. asort - 对数组进行排序并保持索引关系; asort($arr);//同sort功能,保持原始键值对应关系。 [1]=>2,[0]=>4,[4]=>7,[2]=>12,[3]=>88. arsort - 对数组进行逆向排序并保持索引关系; [3]=>88,[2]=>12,[4]=>7,[0]=>4,[1]=>2. rsort - 逆向排序,,重建索引。 rsort($arr);//[0]=>88,[1]=>12,[2]=>7,[3]=>4,[4]=>2. ksort - 对数组按键名排序; krsort - 对数组按照键名逆向排序; usort - 使用用户自定义的比较函数对数组中的值进行排序; uasort - 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联; uksort - 使用用户自定义的比较函数对数组中的键名进行排序。 PHP日期和时间函数: 获取时间戳(从格林威治时间1970年1月1日00:00:00 到当前时间的秒数) time - 返回当前时间戳; microtime - 返回当前 Unix 时间戳和微秒数。 var_dump(microtime());//精确到微妙 string '0.08826200 1463322033' (length=21) var_dump(microtime(true));//返回的是float类型的一个数值。 float 1463322033.0883 时间戳格式化函数 date - 格式化一个本地时间、日期 date('Y-m-d H:i:s');//它有2个参数,第一个参数是格式化时间戳的格式,第二个参数是要格式化的时间戳, 默认是当前时间戳。 //时区,配置值是在php.ini中的date.timezone //获取当前系统中时区设置的值 echo date_default_timezone_get();//GMT date_default_timezone_set('PRC');//Asia/Shanghai Asia/Chongqin. date('今天是星期N');//1-7 echo '本月共有'.date('t'),'天'; gmdate - 格式化一个 GMT/UTC 日期/时间 echo gmdate('Y-m-d H:i:s');//永远是格式化GMT时间,不论你当前系统中设置的是哪个时区。 getdate - 取得日期/时间信息 localtime - 取得本地时间 localtime();//默认情况下返回的是一个索引数组 localtime(time(),true);//如果第二个参数是true,表示返回关联数组 date_default_timezone_set - 设定日期时间函数的默认时区 mktime - 取得一个日期的Unix时间戳。 time() <=> @mktime() //如果参数是默认则和time()返回的值一样。@:屏蔽警告。 mktime(时,分,秒,月,日,年);//获取指定的时间戳 strtotime - 将任何英文文本的日期时间描述解析为Unix时间戳。 strtotime('2016-10-25 21:59:00');=>时间戳 strtotime('now');//表示获取当前时间戳 strtotime('-1 day');//获取昨天此时的时间戳 date('Y-m-d H:i:s',strtotime('-1 day'));//格式化输出时间戳 strtotime('+1 day +1 month +1 year');//加1年1月1天 checkdate - 验证一个日期的合法性。 checkdate(12,31,2000);//true checkdate(2,29,2001);//false PHP日期和时间应用 1、比较两个时间的大小 思路:统一转换成UNIX时间戳进行比较。使用函数 strtotime(). $date = '2016-10-26';//前端提交的查询时间 $time = 1356789564;//存放在数据库中的时间 $int_date = strtotime($date);//转化为时间戳格式 if($time >= $int_date){ echo '存放在数据库中的时间大于或等于前端提交的查询时间<br />'; }else{ echo '存放在数据库中的时间小于前端提交的查询时间<br />'; } echo '前端提交的查询时间',$date,'<br />'; echo '存放在数据库中的时间',date('Y-m-d',$time); 2、计算页面脚本的运行时间 思路:脚本开始执行时,记录一个开始时间,脚本执行结束时,记录一个结束时间,两个 时间相减即可。 //一般使用microtime 而不是 time $start_time = microtime(true);//开始时间,true代表返回浮点型 //sleep(1);//让程序休眠1秒 for($i=0;$i<10000;$i++){ //... } $end_time = microtime(true);//结束时间 echo '脚本运行耗时:',($end_time-$start_time),'秒'; 3、PHP实现日历 思路:获取日历中月的总天数/这个月的第一天是星期几/这个月有几个星期。 $year = 2016; $month = 6; //6月1日的时间戳 $firstDayInt = mktime(0,0,0,$month,1,$year); //获取6月份的总天数 $dayInMonth = date('t',$firstDayInt); //echo $dayInMonth,'<br />'; //6月1日是星期几 $firstDay = date('w',$firstDayInt);//星期日到星期六 //echo $firstDay,'<br />'; //计算6月份有几周 $tmpDays = $dayInMonth + $firstDay; $weeks = ceil($tmpDays/7);//得到周数 //ceil 向上取整 //echo 10/2,'<br />';//5 //echo ceil(10/3),'<br />';//3.33333 => 4. 需要用一个二维数组来保存日期 第一维是周数,第二维是日期。 $days = []; $day_tmp = 0; for($i=0;$i<$weeks;$i++){ //给每周补上日期数 for($j=0;$j<7;$j++){ //第一周需要判断当前$j变量是否大于6月1日的星期数,等于时开始计算,小于时给日期数赋值为空。 //非第一周,计数器也同样递增,但是需要判断计数器的值是否超过本月总天数,超过也要赋值为空。 if(($i==0 && $j>=$firstDay) || ($i>0 && $day_tmp<$dayInMonth)){ //日期计数器加 1 $day_tmp++; $days[$i][$j] = $day_tmp; }else{ $days[$i][$j] = ''; } } } echo '<pre>';//格式化输出 print_r($days); <table border = "1" width="500"> <tr> <th colspan = "7"><?php echo $year,'年',$month,'月';?></th> </tr> <tr> <th>星期日</th> <th>星期一</th> <th>星期二</th> <th>星期三</th> <th>星期四</th> <th>星期五</th> <th>星期六</th> </tr> <?php foreach($days as $week=>$weekDays){//每一周 echo '<tr>'; foreach($weekDays as $day){//每一周的天数 echo '<td>'.$day.'</td>'; } echo '</tr>'; } ?> </table> 第八章:超全局变量 1、PHP与前端数据交互 PHP中许多预定义变量都是“超全局的”,这意味着它们在程序脚本的全部作用域中都可用。 在函数或方法中无需执行 global $variable;就可以访问它们。 PHP有以下超全局变量: $_GET,$_POST,$_REQUEST,$_SERVER,$_ENV,$GLOBALS, $_COOKIE,$_SESSION,$_FILES。 //所有的超全局变量都是数组 echo '<pre>'; print_r($_SERVER); $var1 = 'a'; //global 和 $GLOBALS 的区别 //global 实质是全局变量的一个引用或者叫指针; //$GLOBALS 就是全局变量本身。 function test(){ //echo $var1;//错误的 //想要访问到 $var1 全局变量 global $var1; echo $var1,'<br />'; echo $GLOBALS['var1'];//变量名为键 unset($var1);//销毁变量,此时销毁的变量是全局变量 $var1? 答案:并不是销毁全局(外部)变量 $var1. //var_dump($var1);//null 报一个 notice Undefined variable:var1. unset($GLOBALS['var1']);//此时销毁的才是真正的全局变量 $var1. } test(); var_dump($var1); 前端表单的制作: 表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素。 form - 表单标签 input:text - 文本域 input:radio - 单选按钮 input:checkbox - 复选框 select - 下拉选择 提交表单到PHP程序处理: 表单提交涉及到两个重要元素 action - 表单提交的动作属性(提交的URL地址)。 sumbit - 表单提交按钮。 PHP获取表单数据: PHP接受通过HTML表单提交的信息时,会将提交的数据保存在超全局数组中,我们可以 通过使用这些超全局变量来获取表单的信息。 常用与HTML表单相关的超全局变量 $_GET,$_POST,$_REQUEST. 表单提交有以下两种方式,对应的PHP获取表单数据也有两种方式。 1、GET提交获取 特点:将Form表单中的属性--Method的值设置为GET,通过GET提交数据。 使用全局变量:$_GET,$_REQUEST。 注意:GET方式参数可见,传递数据大小有限,安全性较低。 2、POST提交获取 特点:将Form表单中的属性--Method的值设置为POST,通过POST提交数据。 使用全局变量:$_POST,$_REQUEST。 注意:提交数据大小可控,参数隐藏,比GET方式更安全。 //form 表单 method 缺省的情况下,默认是 GET 方式。 echo $_SERVER['REQUEST_METHOD'];//获取表单提交的方式。 如果表单中既有 GET 的值,又有 POST 的元素值,并且它们的键相同,会以 POST 传过来的值为准。 第九章:会话 Cookie 介绍: 1、cookie 是服务器留在用户计算机中的一小段的文本信息。 2、每当相同的计算机通过浏览器请求页面时,服务器会设置cookie并在响应时发送cookie到客户端, 客户端进行保存,在下次请求访问时带上这个cookie。 3、cookie 常用于识别用户,PHP 能够创建并获取 cookie 的值。 Cookie的创建、获取、修改、删除 Cookie的创建:setcookie(name,value,expire,path,domain,secure); 参数说明:name是cookie变量名称标识,value是cookie变量的初始化,expire是cookie变量的有效 时间,path是cookie变量的相关路径,domain表示cookie变量的可使用的域,secure则需在https的 安全传输时才有效。 实例:setcookie("zsb","yibin",time()+3600,"/",".yibin.com",1); 变量名和值是必须的,而且只能是字符串。 Cookie创建使用的一些限制: 1、需要在脚本文件的内容输出之前设置,否则设置cookie不成功。 2、Cookie设置完后,不能马上读取到。 3、不同的浏览器对Cookie的处理不一致,对于Cookie创建的数量和大小也有不同的限制。 在开发的时候一个页面设置的Cookie总数不要超过20个,且总大小小于4KB。 Cookie的获取和修改: 获取:$_COOKIE["zsb"]; 修改:只能通过setcookie函数修改。 Cookie的删除: 把cookie的值设置为null或空或false;或者利用cookie过期来删除。 setcookie("zsb",null); setcookie("zsb","yibin",time()-3600); 不能使用unset()函数来清除cookie。//unset()只在当前页面清除cookie。 Expire 缺省时,在浏览器进程关闭时cookie失效。 Expire time()+N(N为正整数),表示cookie存活的时间为N秒。 Expire time()+N(N为负数或0),表示cookie已过期。 //setcookie之前不能有任何输出。 //在PHP中,设置cookie之前不能有任何输出,包括BOM头还有空格。 //设置完cookie后第一次访问还不能访问到。 //设置cookie时指定的路径使其在此路径下或此路径的所有子路径下的脚本文件都可访问到此cookie。 //修改zsb cookie的值 setcookie('zsb','newVal'); $_COOKIE['zsb'] = 'newVal';//这种方式无法修改cookie的值。 //通过设置cookie过期来删除cookie的时候,一定要注意设置的路径,默认情况下,清空当前 //路径下的cookie。 //如果设置cookie时写明了路径并且和当前脚本路径不一致,需要带上这个路径参数。 Cookie实例之用户浏览记录: 思路: 1、获取到用户浏览的URL地址; 2、将浏览的URL地址放到cookie中; 3、读取浏览历史记录cookie。 第十章:文件处理 1、打开、关闭文件 resource fopen(string $filename,string $mode [,bool $use_include_path = false [,resource $context]]); $filename 表示要打开的文件路径. $mode 表示打开方式. 关闭文件 bool fclose(resource $handle) 读写文件 读文件内容: string fread(resource $handle, int $length) -- 从文件指针handle读取最多length个字节。 直到读取到$length长度的字节或者到了文件末尾时会终止读取。 feof($handle) -- 函数判断是否到了文件末尾。 把内容写入文件: int fwrite(resource $handle, string $string [, int $length ]) -- 把string的内容写入文件 指针handle处。第三个参数是表示写入多少个字节。 操作文件: file_get_contents() -- 获取文件内容; file_put_contents() -- 将一个字符串写入文件; file_exists() -- 检测文件或目录是否存在; is_file() -- 判断给定文件是否为一个正常文件; fgets() -- 函数用于从文件中读取单行; fgetc() -- 函数用于从文件中读取一个字节; fstat() -- 通过已打开的文件指针取得文件信息。 int filesize() -- 取得文件大小; fileatime($file_path) -- 获取文件上次访问时间; filemtime($file_path) -- 获取文件上次内容被修改的时间; is_readable() -- 判断给定文件名是否可读; is_writable() -- 判断给定的文件名是否可写; unlink() -- 删除文件函数; file() -- 把整个文件读入一个数组中。 第十一章:MySQL操作方式 操作MySQL数据库方式: 不管是哪种操作方式,都必须开启对应的扩展。 1、Mysql方式; Mysql方式存在一些安全性,在高版本的PHP中使用会出现警告信息甚至关闭了此连接方式。 操作步骤: 1-1:连接数据库; 1-2:选择数据库并设置字符集; 1-3:执行SQL语句; 1-4:关闭数据库连接。 2、Mysqli方式; 2-1:连接数据库 配置PHP.ini文件,开启mysqli扩展; extension = php_mysqli.dll前面的分号去掉; 执行连接:mysqli mysqli_connect($dbhost,$dbuser,$password,$database); 2-2:执行查询语句 mysqli_query(mysqli $link,string $query); $link表示数据库连接句柄; $query要执行的SQL语句。 注意在查询结果前养成一个良好的习惯,设置数据库字符集: bool mysqli_set_charset(mysqli $link,string $charset); mysqli_query($link,'set names 字符集'); 2-3:获得查询结果 mysqli_fetch_array()-返回一个结果集,可以通过第二个参数指定返回格式,默认是既有关联数据 又有索引数组 MYSQLI_ASSOC/MYSQLI_NUM/MYSQLI_BOTH. mysqli_fetch_assoc() - 仅返回一个关联数组结果集; mysqli_fetch_row() - 仅返回一个索引数组结果集; mysqli_fetch_object()- 返回结果集的当前行(作为对象)。 2-4:获得影响行数 mysqli_affected_rows(mysqli $link);//插入、更新、删除。 mysqli_num_rows(mysqli_result $result);//查询 2-5:获得错误信息 mysqli_error(mysqli $link);//操作错误 mysqli_connect_errno(); mysqli_connect_error();//连接错误 释放结果集和关闭连接 mysqli_free_result(mysqli_result $result);和mysqli_close(mysqli $link); 2-6;释放结果集和关闭数据库连接 3、PDO方式。 PDO方式安全性好,标准统一,支持多种数据库。
$v = 'a'; //global 和 $GLOBALS 的区别 global 实质是全局变量的一个引用或者叫指针。 $GLOBALS 就是全局变量本身。 function test(){ //echo $v; //错误 //想要访问到 $v 全局变量 global $v; echo $v,'<br />'; echo $GLOBALS['v'],'<br />';//变量名为键 unset($v);//销毁变量,此销毁的并不是全局(外部)变量 $v. //var_dump($v);//null 报一个notice Undefined variable:v. unset($GLOBALS['v']);//此时销毁的才是真正的全局变量 $v. }
相关文章推荐
- PHP语法基础
- 使用 PHP 搭建自己的视频点播网站,第 1 部分:基础工作
- php基础语法---php语言标识
- PHP基础语法
- PHP语法基础:数据类型、常量与变量的声明及区别
- 入门系列之二PHP基础语法:if 语句的使用
- PHP特级视频教程 笔记心得 第十六集 mysql调优,mysql优化 MySQL基础操作(一)
- 在w3cschool.com学习PHP基础语法
- PHP学习笔记--第二章:语法基础
- 痕迹_PHP基础语法——变量
- 使用 PHP 搭建自己的视频点播网站,第 1 部分:基础工作-(1)
- PHP_语法基础
- php基础语法
- PHP 语法 基础知识
- PHP基础学习笔记之基本语法
- C,Delphi,PHP 基础语法对比
- PHP的语法基础
- 基础PHP语法学习:常量,变量
- PHP基础语法2
- PHP特级视频教程 笔记心得 第十五集 mysql调优,mysql优化 MySQL基础操作(一)