php1.0

1.0 php 服务器脚本语言,适合开发web,实现功能,开源免费,可执行在各种平台支持所有的数据库

2.0 php是用来写动态网站的。

3.0 3wHp

what :学习的是什么东西

why:为什么要学习它

when:学完之后什么时候用

how:怎么用,灵活运用

practice:实践,实践,实践

4.0 如果文档中只有php代码就不需要结束的标记

如果有其他代码一定要有结束标记

标准语法<?php ?>

5.0 语法规范每一行都要用; 结束

6.0 parse error 语法错误

7.0 单行注释// 

多行注释/**/

跟js是一样的,并且在源代码中看不到的

8.0 php的工作原理

8.5 在浏览器打开一个url都发生了什么?

1.0 发送了一个请求

1.2 dns服务器,将域名转换为ip地址,找到相应的服务器。

2.0 httpresponse相应一个结果,如果请求存在,和不存在,不存在就给你一个不存在的结果

3.0 根据你的请求类型,如果apache服务器能处理的了,就通过http的response返回给浏览器,如果处理不了,比如php文件,那接下里就交给php引擎处理,处理之后再通过http  response响应给浏览器,

4.0 如果有数据库,php引擎就要去操作数据库

9.0 php中的变量

声明变量 $+名称 

$age = 15;

可以声明再使用也可以不声明,以字母下划线开始,不能包含特殊字符。驼峰命名法

php严格区分大小写,

变量重名的话,后面的会覆盖掉前面的

undefined valiable (未定义的变量)

10.0 等量代换

$a = 'b';

$b = 'c';

$c = '123';

echo $$$a;//123

11.0 var_dump()

打印变量的详细信息,可以传一个,也可以传多个,用,(逗号)隔开就行

12.0 php中的数据类型

    12.1 8中主要数据类型

            3种伪类型

12.2 主要数据类型又分为

标准类型:1.0 整形(int|integer)

10进制 8进制等都行

范围-21亿到21亿之间,超过的话就溢出

2.0 浮点型(float,double,real)

可以用科学计数法

不要比较两个浮点数的大小,有误差

$a = 2e3;//2乘以10的3次方

$b = 2E-2;//2乘以10的-2次方

var_dump($a,$b);// float(2000) float(0.02)

3.0 布尔型(bool | boolean) 

真或假 true和false

4.0 字符串

4.1 单引号 不解析 变量

4.2 双引号 解析变量

4.3 ‘’// 空字符串

转义字符有\n 换行

\r 回车

\t 水平制表符

\\   \ 

\$   $

\'    '

\"     "

单引号直解析\\  \'

echo ''后面加,(逗号)就可以输出多个字符串

4.5 花括号{}

4.51将变量阔成一个整体

如:$name = "123"

echo "我是{$name}按时付款计划"

或者 "我${name}阿斯蒂芬快疯了"

4.52 可以对字符串中指定的字符做增删改查的操作

$var = "abc"

$var{0} = "1"

$var // 1bc

就是根据下标做操作跟js类似

$a = 2e3;//2乘以10的3次方

$b = 2E-2;//2乘以10的-2次方

// heredoc相当于双引号

$str = <<<edo

        <h1>{$b}<h1>

    </div>

edo;

echo $str;

echo '<br/>';

// nowdoc 不能解析变量

$sta = <<<'WER'

<div>

<h1>{$a}</h1>

</div>

WER;

echo $sta;

复合类型1.0 数组

$arr =array();//空数组

$arr = array(12,'king',true);

var_dump($arr);

2.0 对象

$obj = new stdClass();

var_dump($obj);//object(stdClass)

特殊类型1.0 资源

//资源

$a = fopen('./test2.php','r');

var_dump($a);//resource(3) of type (stream)

2.0 空 null 或者NULL

2.1变量未声明直接使用

2.2变量直接赋值为null

var_dump($a);

echo '<hr/>';

$b = null;

var_dump($b);

echo '<hr/>';

unset($b);

var_dump($b);

2.3unset()销毁的变量

12.... 5中伪类型

mixed

number

callback

void

$...

13.0 如果php中代码有中文

// 告诉浏览器以什么编码方式解析什么文档类型,防止中文乱码

header('content-type:text/html;charset=utf-8');

14.0 

// 设置错误级别,E_ALL但是除了NOTICE

error_reporting(E_ALL&~E_NOTICE);

15.0 php中的数据类型转换

15.1 自动转换(隐式转换)

//其他类型转成数值型

echo 1+2,'<br/>';//3

echo 1+2.2,'<br/>';//3.2

echo 1+true,'<br/>';//true->1

echo 1+false,'<br/>';//false->0

echo 1+null,'<br/>';//null->0

echo 1+'3king','<br/>';//3king->3

echo 1+'45asdf','<br/>';//->45

echo 1+'2e2asd','<br/>';//2e2->200

echo 1+'true','<br/>';//'true'->0

//其他类型转换为字符串

echo 1,'<br/>';//1

echo 1.2,'<br/>';//

echo true,'<br/>';//1

echo false,'<br/>';//''空字符串

echo null,'<br/>';//''

$arr = Array();

echo $arr;//Array

//Catchable fatal error: Object of class stdClass could not be converted to string

// 致命错误,对象不能直接转换成字符串,程序会终止

$obj =new StdClass();

echo $obj;

// 其他类型转换为boolean类型,主要在条件语句中

$var = 0;//0->false

$var = 0.0;//0.0->false

$var = '';//->false

$var = '0';//->false

$var = null;//null->false

$var = array();//空数组->false

$var = '0.0';//->true

15.2 强制转换(显示转换)

临时转化:

方法1(类型)变量名称

注意 浮点型转换成整型是舍掉的意思

    1.0 整型 (int)$age (integer)$age

    2.0 浮点型(float|double|real)

    3.0 字符型(string)

    4.0 布尔型(boolean)

    5.0 空(unset)

    6.0 数组(array)

    7.0 对象(object)

方法2 通过系统函数实现

    1.0 整型 intval($var)

    2.0 doubleval() floatval() realval()

    3.0 strval()

    4.0 booleanval()

永久转换:

setType($var,$type)

$var = '123'

setType($var,'int')

bool,float,string,array,object,null

对应的有getType($var) 获取变量类型(不建议使用)

我们一般通过变量函数库检测类型 is_*

    只返回真或者假

    is_int($var)

    is_boolean($var)

    1.0 整型 is_int() is_integer() is_long()

    2.0 浮点型 is_float() is_double() is_real()

    3.0 字符串 is_string()

    3.5 布尔类型 is_bool()

    4.0 标量类型 is_scalar() 

    标量: 整型,浮点型,字符串,布尔类型都是

    5.0 空null is_null()

    6.0 数组    is_array()

    7.0 对象 is_object()

    8.0 资源 is_resource()

    9.0 是否为数值型或者字符串形式的数值 is_numeric()



16.0  常量

常量是一个简单的标识符,一经定义不能修改

分类16.1 系统常量

PHP_VERSION PHP版本

PHP_OS php运行环境

PHP_INT_MAX 整型最大值

16.2 自定义的常量

define()函数定义

一般要用大写的

define(‘NAME‘,'123')

NAME ==123

前面不要加$

define定义的时候不要加$

常量区分大小写,是全局的

另外一种就是 const  AGE = "18";

根据常量的名字获取常量的值,

constant()

echo constant('AGE')

检测常量名称是否存在,返回true ,,false

defined('AGE')

获取定义的所有常量 ,自定的加系统的

get_defined_constants()

$var = [1,2,3];

print_r($var);

print_r() 打印数组的信息

16.3 魔术常量 

__LINE__

以两个下划线开始且以两个下划线结束,中间都是大写

总共有8个

    1.0 __LINE__

得到当前的行数

2.0 __FILE__

得到当前文件的完整绝对路径和文件名

3.0 __DIR__

得到文件的绝对完整路径

4.0 __FUNCTION__

得到当前的函数名称

5.0 __CLASS__

得到当前类的名称

6.0 __METHOD__

得到当前类的方法名称

7.0 __TRAIT__

得到当前的TRAIT名称

8.0 __NAMESPACE__

得到当前命名空间


17.0 php 中的预定义变量

// 接收表单以post形式发送过来的数据

$_POST['名称'] 

1.0$GLOBAL  超全局变量,包含下面所有的预定义变量

2.0 $_SERVERS 服务器和执行环境信息变量

3.0 $_ENV 环境变量

4.0 $_COOKIE http cookie

5.0 $_SESSION http seccion变量

6.0 $_FILES 文件上传信息变量

7.0 $_GET http get变量

8.0$_POS http post 变量

9.0$_REQUEST  $_GET+$_POST+$_COOKIE

18.0php 中的表达式和运算符

只要是有值得东西都是表达式

18.1 算数运算符

+-*/ % 取余

-3 % -8 后面的负号没作用所以结果是 -3

php7中新增的运算符

2**3  // 8 2的3次方  幂运算符

18.2 递增递减运算符

++-- 前缀和后缀

$i=5

echo $i++ //5

echo $i //6

布尔类型不支持递增和递减

null 支持 递增,不支持递减

字符串支持递增,也不支持递减

$str = 'a';

echo ++$str// b

$str = 'b';

echo ++$str// c

++z  //aa

ord()函数可以获取到对应的ascii码值

多个字符串,比如“king”

只会获取第一个k的值,ord() chr()都一样

chr() 根据ascii获取对应的值

ASCII

18.3 字符链接运算符 点.

$str1 = 'hello';

$str2 = "world";

$str = $str1.$str2;

echo $str // hello world

echo 'a'.'b';


18.4 赋值运算符

=

+= $a+=1  $a = $a+1

-=

*= $a*=3 $a = $a*3

/=

%=

点等于.= $a .= 'kk' $a = $a.'kk'


18.5 比较运算符

<>  != 都是不等于

(太空船运算符<=>)

var_dump(3<=>1,3<=>3,3<=>5); 

// 1 0 -1 

3比1大返回1

3跟3相等返回0

3比5小返回-1


null 检测符

var_dump(0??$b??$c)

输出从左到右部位null的值,如果都为null 则返回null

第一个是0 就返回0 ,第二个是1,第一个是null 就返回第二个

18.6 逻辑运算符

结果也是boolean类型

$a and $b // $a&&$b

$a or $b // $a||$b

!$a

$a xor $b 逻辑异或 就是$a 和$b 不能同时为true 就返回true

18.7 错误抑制符

在前面加@符号就行啦

$var = 123

@settype($var,'king');

@var_dump($sddfe)

test() // 这种致命的错误是不行的

echo @(3/0);// 返回INF 表示无穷大


三元运算符

a? b : c

a为真执行b 否则 执行c

另外的 a? :c

如果a为真返回a

a为假返回c

优先级

用()改变优先级,还有短路的情况

19.0  流程控制语句

分支语句:if

循环语句:for

判断奇偶数

取余 =1 就是奇数 

=0就是偶数

判断是闰年

1.0能被4整除,不能被100整除的是闰年

2.0能被400整除的也是闰年

取很多数中的最大值和最小值

max($a,$b,$c)

min($a,$b,$c)

switch(exp){

    case 值1:

    代码段;

    break;

 case 值1:

 代码段;

    break;

default:

代码段;

}

20.0  日期

/*

* Y:4位的年份 * m:2位月份 * d:2位的日 * H:2为的小时 * i:2位的分钟 * s:2位的秒 * w:返回一周内的第几天0~6

*

* */

echo date("Y年m月d日 H:i:s");

echo date("Y-m-d" ,time());

echo date_default_timezone_get();// utc

//设置中国标准时间

date_default_timezone_set('PRC');


碰到 exit或者是die() ,程序终止执行

exit('asdasdasd');

21.0 循环语句有

for

while

do...while


continue 跳出当前循环,进行下面的循环


php7里面的

// goto 跳转到指定位置,不能跳入循环 函数和类 但可以跳出循环

echo "w";

echo "<br/>";

goto TEST;

echo "22";

TEST:

echo "33";

22.0  自定义函数

作用:可读性,复用性

书(代码简洁之道)

函数体里面的动态变量,是局部变量,不能在函数体外面使用

如果是静态变量你看一下

function test(){

    static $a = 3;

    $a++;

echo $a;

}

test() //4

test()//5

全局变量

$a = 3;

$b = 4;

function test(){

    echo $a;

}

test()// 会报错,需要先引用一下

function test(){

    global $a;

echo $a;

}

test()

值传递和引用传递区别在&

$a = 3;

function test(&$c){

    $c = 5

}

change($a)

echo $a//5

如果是new 出来的stdClass() 

那就 不用这符号,因为他是在堆内存中,属于直接引用,,

像整型,浮点型,普通变量是属于在栈内存中的。

23.0 参数的默认值

function test($a=3,$b=5){}

24.0  可变参数列表

获取传递了几个参数

    func_num_args()

    获取参数

    func_get_args();

例子:模仿var_dump

    我们只做是整型和字符串的,其他的类型没写

    function var_dump2(){

    if(func_num_args()<=0){

        return;

    }

$params = func_get_args();

foreach($params as $param){

    if(is_int($param)){

    echo 'int('.$apram.')';

 }

    if(is_string($apram)){

    echo 'string('.strlen($param).')' '..$param';

}

}

}

25.0 函数参数的类型,定义

// 三种array,对象,callable

function test(array $a){

}

// 注意回调函数

function test(callable $a){

$a();

}

function call(){}

test('hello world') // 注意这里要传字符串

26.0 可变函数

function test(){}

$func = 'test';

$func()

// 一般会搭配检测,函数是否存在

如:

if(is_callable($func)){}

if(function_exists($func)){}

27.0 函数嵌套,

函数都是全局作用域

function test(){

    function te(){}

}

要想调用te()

必须先调用test()

所以 

function foo(){

    $a = 1;

    function ff(){

    echo $a;// 报错,不能调用的

}

}

28.0 递归的调用

function sum($n,$m){

    if($m<=$n){

        return $n;

    }

return sum($n,$m-1)+$m

}

// 1,1,2,3,5,8

function fb($n){

    if($n<=2){

    return 1;

}

return fb($n-1) +fb($n-2);

}

echo fb(8) //6

30.0 匿名函数

$a = function ($b){

    echo $b;

}

$a('123')

例子 :

$mes = '111'

$a = function($b){

    echo $mes; 

echo $b;

}

$a('123')

// 上面的$mes 是打印不出来的,要声明一下

$a = function($b){

global $mes;

echo $mes;

echo $b;

}


如果嵌套在函数里面用到use关键字

function test(){

    $mes = '111';

    $a = function($b) use ($mes){

        echo $mes;

        echo $b;

    };

    $a('123');

}

test();

另外一种形式

function test(){

    $mes = '111';

    $a = function($b) use ($mes){  //$a = function($b,$mes) {这种方法是不行的

        echo $mes;

        echo $b;

    };

    return $a;

}

$func = test();

$func('123');

31.0 冒泡排序

count() 计算数组的长度

check() 可以检查数组中 数组改变的次数

32.0 汉罗塔问题,

3根柱子, 放到其他柱子里面,注意大的圆盘不能压在小的圆盘上面,

所以就是,把第一个放在第二个柱子,把第二个放在第三个柱子,然后把第一个圆盘再放在第三个柱子,然后把第三个放在第二个柱子



function test($n){

    if($n<=1){

        return $n;

    }

    return 2*test($n-1)+1;

}

var_dump(test(2),test(3),test(4));


33.0  函数库基础

函数(function) 是实现特定功能的,可以重复执行的代码。

34.0 

// 获取字符串长度

$a = '';

$b = '132';

echo strlen($a);//0

echo strlen($b);//3

一个汉字是3个字节mbstring()

35.0 

// 字符串大小写的转换

$a = 'sads';

$b = 'SDFGDFDF';

echo strtoupper($a);//0

echo '<br/>';

echo strtolower($b);//3

echo '<br/>';

// 句子首字母转换为大写

$c = 'asdasd';

echo ucfirst($c);

// 每个单词的字母转化为大写

$d = "hello world ni haowo";

echo ucwords($d);

// 替换,这两个是全部替换的 str_replace ,区分大小写 str_ireplace,不区分大小写

$a = 'javascript';

echo str_replace('a','b',$a);//jbvbscript

echo str_ireplace('R','W',$a);//javascWipt


htmlspecialchars函数 

预定义的字符转换为HTML实体

ENT_COMPAT  默认,仅编码双引号

ENT_QUOTES 编码双引号和单引号

ENT_NOQUOTES 不编码任何引号

$a = 'A>B,B>c,sjdhgf&sdjhfg,"wyefjh",\'i\'m no\'';

echo $a;

echo '<br/>';

echo htmlspecialchars($a,ENT_QUOTES);

36.0 

// 删除空格或其他字符 都可以接受第二个参数ltrim rtrim trim

//ltrim() 删除前面的

// rtrim 删除后面的

// trim 删除所有的

// 如果不加第二个参数,默认删除 \0 制表符 \r 空格 \n 垂直制表符

$str = "\n\n\t\tacd\t\t";

echo ltrim($str); // acd 

37.0 

// 字符串位置的获取

// strpos 区分大小写,某个字符在字符串中第一个出现的位置

// stripos 不区分大小写,两个如果没找到,返回false

// strrpos  区分大小写 最后一次出现的位置

// strripos  不区分大小写,最后一次出现的位置

$str = "javascript";

echo strpos($str,'a');//1

echo strpos($str,'ww');//false

38.0  substr 函数,实现字符串的截取,三个参数

str start length  第二个参数是起始位置,后面的是长度

$str = 'javascript';

echo substr($str,0,4);//java

echo substr($str,4);//script

echo substr($str,-2);//pt

echo substr($str,-5,-2);//scr


// strstr 搜索一个字符串在另一个字符串中第一次出现的位置,并截取,区分大小写

// stristr 同上,不区分大小写

$str = 'javascript';

$str1 = 'a';

echo strstr($str,$str1);//avascript

38.0 字符串的反转 strrev

$a = 'abc';

echo strrev($a)// cba

39.0 字符串加密操作 md5()// 长度 32 不可逆

40.0 打乱字符串 str_shuffle // 如产生验证码 每次值都不一样

41.0  explode函数 字符串的分割操作,分割的内容是数组 

$str = 'javascript';

$str1 = 'a';

print_r(explode($str1,$str));//Array ( [0] => j [1] => v [2] => script )

42.0  implode  数组的合并 

$str = array('1','2','3');

echo implode($str);//123

echo implode('|',$str);//1|2|3

43.0 

// 格式化字符串

// sprintf函数

// 说明%符号多余arg参数,则必须使用占位符,占位符位于%符号之后,由数字和"\$"组成

$num = 5;

$str = "shanghai";

// 把第一个arg个第一个参数 把第2个arg个第2个参数

$txt = sprintf('wo shj %u in sdh %s',$num,$str);

echo $txt; wo shj 5 in sdh shanghai

//格式化字符串  $format ,规定字符串以及如何格式化其中的变量,可能的取值

//%% 返回一个百分号%          %b 二进制

// %d 包含正负号的10进制数    %e 使用小写的科学计数法

// %s 字符串                %f 浮点数

$txt = sprintf('wo shj %b in sdh %s',$num,$str);

echo $txt;     wo shj 101 in sdh shanghai

$txt = sprintf('wo shj %d in sdh %s',$num,$str);

echo $txt;   wo shj 5 in sdh shanghai

$txt = sprintf('wo shj %.2f in sdh %s',$num,$str);

echo $txt;    wo shj 5.00 in sdh shanghai

$txt = sprintf('wo shj %.5f in sdh %s',$num,$str);

echo $txt;   wo shj 5.00000 in sdh shanghai

// 参数多的情况

$number = 123;

$txt = sprintf("带两位小数:%1\$.2f不带小数:%1\$u",$number);

echo $txt;  带两位小数:123.00不带小数:123

$txt = sprintf("wo shj %1\$s in sdh %1\$s",$num);

// 注意里面一定要是"" 双引号,双引号

echo $txt;   wo shj 5 in sdh 5

php 数学函数库

44.0 floor 函数和ceil()函数

floor 舍1取整 

ceil 进1取整

$a = 2.1;

echo floor($a);//2

echo ceil($a);//3

$a = 2.6;

echo floor($a);//2

echo ceil($a);//3

45.0 幂运算

2的3次方

echo pow(2,3)

47.0 平方根的运算 sqrt函数

echo sqrt(4) // 2

echo sqrt(3) // 1.73205

48.0 最大值,最小值

max() min() 至少需要2个以上参数

49.0 随机数的获取

rand函数

mt_rand()函数  它将产生一个更好的随机数 // 算法好,性能好

echo rand(50,80);

echo '<br/>';

echo mt_rand(50,80);

注意会出现50 或者80 

50.0 round函数 四舍五入的操作

$a = 1.738;

echo round($a);//2

echo '<br/>';

echo round($a,2);//1.74

51.0 数字格式化

number_format函数

两个参数,第二个参数保留到几位

并且进行了四舍五入计算

$a = 14578.738;

echo number_format($a);//14,579

echo '<br/>';

echo number_format($a,2);//14,578,74

52.0 浮点数余数

fmod()

echo fmod(7.8,3) // 1.8

echo 7.8%3 //1 整数的余数操作

53.0 格式化日期

第二个是可选参数,时间戳

53.0

54.0 修改时区的方法

1.0 date_default_timezone_set('PRC');

2.0 通过php.ini文件 找到date.timezone (需要重启服务器)

55.0 时间戳Unix时间戳,就是从1940年1月1日0时0分0秒到现在的总秒数

56.0 获取现在的时间戳 time()方法

echo time()

86400 就是一天的毫秒数

57.0 microtime() 获取时间戳,会带上微秒数

里面加bool类型,不加的话,微秒在前面

加的话在后面 (作用:可以计算程序所花费的时间)

例子:

echo microtime();//0.03091100 1553918332

echo '<br/>';

echo microtime(true);//1553918332.0309

58.0 获取时间戳的转换,比如3个星期之前或者之后,等

strtotime()

例子:

// 获取上一个月的日期,有坑

echo date('Y-m-d H:i:s',strtotime('-1 month'));// 不对因为他是已30天为一个单位的

echo date('Y-m-d H:i:s',strtotime('last day of -1 month'));// first day of 第一天

59.0 生成唯一ID

uniqid函数

echo uniqid();

echo '<br/>';

echo uniqid('mooc');

echo '<br/>';

echo uniqid(microtime());

echo '<br/>';

echo uniqid(microtime() . mt_rand());

echo '<br/>';

echo md5(uniqid(microtime() . mt_rand()));//这个就是我们常用的生成唯一id的常用的

// uuid 8-4-4-12 32位的

60.0 

var_dump(getdate());// 获取日期信息

61.0 php中的数组

数组是一个有序映射,是复合类型

索引数组,,下标为数字

关联数组:下标为字符

$arr = array();//空数组

// 通过gettype()得到变量类型

echo gettype($arr);

// 通过is_array()检测是不是数组

echo '<br/>';

echo is_array($arr);//1

var_dump(is_array($arr));//true

// 指定下标的数组

$arr = array(3=>'a','5'=>147);

var_dump($arr);

// 定义关联数组

$arr = array('username'=>'zl','age'=>147);

true=>'45',//1 下标转为1

false=>4, //0 下标转为0

null=>we);// '' 空字符串

// 如果下标重复,后面的会替换掉前面的

// 创建多维数组

$arr = array(

    array(a,b,c),

    array(d,e,f)

);

// 二维关联数组

$arr = array(

  'user'=>array('zl','xm','iw'),

    'age'=>array(14,25,5)

);

// 通过【】创建数组

$arr = [

    ['id'=>1,'name'=>'xl'],

    'text'=>['a',1,2],

];

// 动态创建 下标连续的索引数组

$arr[] = '1';

$arr[] = 145.2;

$arr[] = '145';

// 手动指定下标的索引数组

$arr1[3] = 14

$arr1[-15] = 46

$arr1['we'] = 65

// 多维的 

$arr[][]

// 通过range()和compact()快速创建数组

$a = range(5,10); // 下标从0开始,值从5开始

$b = range(1,10,2);// 值从1开始,每次加2,步长的意思

chr() 把值转为ascii吗值

// 通过compact 创建数组的时候,只能写已经存在的变量的名称,不需要加$

$a = 12;

$b = 45;

$c = null;

$d = compact(a,b,c);// compact('a','b','c')

// define() 定义常量数组

// 5.6 之后可以用const定义 常量的名字一般要大写

const ARR2 = ['a'=>'aa',b=>'bb'];

define('ARR1',array(1,2,3));

define('ARR3',[1,4,5]);

echo '<br/>';

var_dump(ARR1);

echo '<br/>';

var_dump(ARR2);

61.0 数组的使用 ,通过键名找键值

$arr = ['a','b'];

$arr[] = 'c';

$arr['test'] = ['1',2];

$arr[0] = 12;

// 删除某个元素 unset;

unset($arr[1])// 删除下标是1的元素

// 针对二维数组的操作

$arr[] = ['id'=>1,'name'=>2,'desc'=>'wowowo'];

$arr[] = ['id'=>2,'name'=>2,'desc'=>'wowowo'];

$arr[] = ['id'=>3,'name'=>2,'desc'=>'wowowo'];

var_dump($arr);

$arr[0]['name'] = "xixixixxixi";

echo $arr[0]['name'] ;

// 删除

unset($arr[0]['name']);

// 将其他类型转换成数组

// 临时转换

$var = 123;

$var = 12.3;

$var = true;

$var =null;// 转换为空数组

// 永久转换settype($var,$type);

settype($var,'array');

62.0 

// 数组运算符 +,==,===,!=, <>,!==  != 和<> 都是不等于的意思

//+合并数组

$arr1 = [1,2,3];

$arr2 = ['a','b'];

$arr3 = $arr1+$arr2;

print_r($arr3);// [1,2,3] 如果键名相同只是用 左边的

$arr4 = ['a','b','c','d'];

$arr3 = $arr1+$arr4;

print_r($arr3);//[1,2,3,'d']

// == 比较键名和键值是否相同,相同返回true,否则返回false

// === 键名和键值是否相同,并且顺序也要相同

62.0 数组的遍历

1.0 foreach遍历数组

2.0 通过数组指针函数遍历数组

3.0 each()和list()函数遍历

$arr= range('a','g');

// count()得到数组中元素的个数

echo count($arr);

// 如果是null的话,返回的是0

$var = null;

echo count($var);//0

// 两种形式

    foreach ($arr as $value){

        echo $value;

        echo '<hr/>';

    }

foreach ($arr as $key=>$value){

    echo $key.'--'.$value;

    echo '<hr/>';

}

foreach 只能遍历数组和对象

//7.0 的一些新变化

/*

*1.0 可以通过:endforeach 代替{}

*2.0 操作的值是数组的副本 * 3.0 通过引用遍历时,有更好的迭代特性 * 按照引用进行循环的时候,对数组的修改会影响循环* */

$ww = [1,2,3];

foreach ($ww as $w):

    echo $w;//123

endforeach;

$arr=['a'];

foreach ($arr as &$v){

    echo $v; // a,b

    $arr[1] = 'b';

}

2.0  

/*

* key($array):得到当前指针所在位置的键名  如果不存在返回null

* current($array):得到当前指针所在位置的键值  如果不存在返回false

* next($array):将数组指针指向下移动一位,并返回当前指针所在位置的键值,,如果没有,返回false

* prev($array):将数组指针指向上移动一位,并返回当前指针所在位置的键值,,如果没有,返回false

*reset($array):移动到数组开始,并返回当前指针所在位置的键值,如果没有,返回false

* end($array):移动到数组末尾,并返回当前指针所在位置的键值,如果没有,返回false

*/

$arr = [

  'a','b','c',

  34=>'test',

  'age'=>12

];

echo '键名:',key($arr),'<br/>';

echo '键值:',current($arr),'<br/>';

echo next($arr),'</br>';

echo '键名:',key($arr),'<br/>';

echo '键值:',current($arr),'<br/>';

echo next($arr),'</br>';

/*

* 键名:0

键值:a

b

键名:1

键值:b

c

* */

数组指针相关函数


list() // 将下标连续的索引数组赋值给相应的变量

each()//

$arr = [1,2,3]

list(,$a,$b) = $arr

$a = 2 $b =3

$a = [

[1,2,3]

[1,3,4]

[1,4,5]

]

forearch($a as list($name,$age,$many)){

    //  类似于 $val = list($name,$age,$many

}

// each($arr) 得到当前指针位置的键值对,返回的是数组,4个部分,并且指针向下移动一位

$arr = [

    'a'=>'aaa',

    'b'=>'bbb',

    'c',

    'name'=>'w',

    33=>'ddd'

];

//$res = each($arr);

//var_dump($res);

//list($k,$v) = each($arr);

//echo $k,'--',$v,'
';

//list($k,$v) = each($arr);

//echo $k,'--',$v,'
';

while(list($k,$v) = each($arr)){

    echo $k,'--',$v,'<br/>';

}

a--aaa

b--bbb

0--c

name--w

33--ddd

数组相关api

1.0 创建数组操作

2.0 键值相关操作

3.0 数组指针相关操作

4.0 数组拆分与合并相关操作

5.0 数组交集与差集相关操作

6.0 数组排序相关操作

63.0 cookie的一些内容

1.0 什么是cookie

http cookie(也叫web cookie或者浏览器cookie)是服务器发送到用户浏览器并保存在浏览器上的数据,它会在浏览器下一次发起请求时被携带并发送到服务器上,http cookie是http标头的组成部分。

session 是在服务器端的。

2.0 cookie的作用是什么?

2.1 回话状态管理(如用户登录状态,购物车)

2.2 个性化设置(如用户自定义设置)

2.3 浏览器行为跟踪(跟踪分析用户行为)

3.0 与cookie相关的函数

setcookie('username','tom',time()+10*86400,'/','*/jd.com');

// 10天内有效

/* tv.jd.com

spo.jd.com

 wes.jd.ocm 在这些域名下都有效 * */

setcookie($name,$value,$expire $path,$domain)

参数说明

$name 参数用于指定cookie名称

$value 参数用于设置cookie值

$expire参数用于设置cookie的声明周期

$path 参数用于设置服务器上可用cookie的路径,如果设置 ‘/’ ,则代表在整个域名内都有效,如果设置为‘/foo/,’则仅代表在域名内的/foo目录及其子目录内有效

$domain 参数用于设置cooki可用的域名范围(包含子域名)

会话期cookie是指浏览器关闭之后会被自动删除,也就是它仅在会话期间有效,会话期cookie不需要指定过期时间,

如果想马上失效的话,就把时间那个加号+变为-号就行

64.0 

1.0 什么是session

session 在计算机中,尤其是在网络应用中,称为“会话控制”;

具体到web中的session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间,因此从上述的定义中可以看到session是一个特定的时间概念。

2.0 为什么要使用session

为了解决http短连接的特性

2.1 http协议是一种无状态协议,即同一个客户端的本次请求和上次请求没有对应关系,http服务器并不知道这两个请求来自统一客户端:

优点:在于减轻服务器的压力:缺点:在于每次请求会传输大量重复的内容信息

2.2 session提供在php脚本中定义全局变量的方法,使得整个全局变量在同一个session中对于所有的php脚本文件内都有效。所以,session是汲取http服务器的用于保持状态的方法

2.3 session允许通过将数据存储在http服务器中,以在整个用户会话过程中保持该数据;所以sesssion不仅是一个时间概念,还包括了特定的用户和服务器。

3.0 session的工作原理


3.0


4.0

会话标识符(sessionID)

~会话由一个唯一标识符标识,可使用session_id函数读取此标识符,为php应用程序启用会话状态时,将检查应用程序中每个页面请求是否有浏览器发送的sessionID值,如果未提供任何sessionID值,则php将启动一个新会话,并将该会话的sessionID值随响应一起发送到浏览器

~默认情况下,sessionID值存储在Cookie中,也可以实现在url中存储sesssionID

~只要一直使用相同的sessionID值来发送请求,会话就被视为活动的;如果特定会话的请求间隔超过指定的超时值(以秒为单位),则该会话被视为已过期,如果使用过期的sessionID值发送的请求将生成一个新的会话,超时值是24分钟

4.0 与session相关的函数

session_start([array $options = []]) 启动新会话或者重用现有会话

、、 及创建一个sessionid也创建了一个session文件

$options参数是一个关联数组,如果提供的话,则会用其中的项目覆盖 ‘会话配置’中的配置选项;

如果通过get 或者post 方式,或者使用cookie提交了会话id,则会重用现有会话;

demo:

session_start() //开始session会话

$_SESSION['username] = 'mooc' // 存储session数据

、、 获取sessionid

echo ‘id是’,session_id()

设置session 名字

session_name('mooc');

$SESSION['userid'] = 5;

$_SESSION['name'] = 'xiao'

// 销毁的操作 销毁一个会话中的全部数据

session_destroy();


5.0


6.0



5.0 php配置中的session片段

65.0 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容