• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

PHP 语法(五)http 错误编号、 冒泡排序、 多字节处理、 快速排序、 数组指针、 算法、 选择排序、 错误处理

Mr.Lee 由 Mr.Lee
2018年5月18日
在 PHP, PHP基本语法
0
PHP 核心编程(二)Mysql 扩展、 数据库连接、 笑话增删改查
0
分享
0
浏览

PHP语法(五)

作业

  1. 猴子吃桃子,第一天吃了一半又多吃一个,第二天一样,到第十天就剩下一个桃子,请问原来有几个桃子?

分析:

用n表示第n天

f(n)/2-1=f(n+1)

f(n)=(f(n+1)+1)*2

代码

  1. 用递归实在二分法

错误处理

错误分类

  1. 语法错误
  2. 运行时错误
  3. 逻辑错误



总结:语法错误是最容易发现的错误,逻辑错误是最难发现的错误。

错误级别

按照错误的严重程度,将错误划分为如下3种:

  1. notice:提示
  2. warning:警告
  3. error:错误

notice和warning错误后代码继续执行,error错误后代码终止执行。

错误的触发

方式一:PHP程序触发

方式二:用户自己触发(trigger_error())

例题:如果年龄不在20~30之间就报错

用户触发错误级别(参照php.ini文件)

多学一招:错误的级别是PHP预定义常量。每一位的1表示一种错误类型。

错误的处理方式

  1. 显示错误报告(默认)
  2. 将错误记录在日志中
  3. 交给用户自定义脚本进行错误处理

错误处理方式的设置

  1. 报错错误级别


  1. 浏览器上显示(关闭)错误报告


  1. 在日志中记录错误

应用:开发的时候错误显示在浏览器,日志不记录,项目运行的时候错误不显示在浏览器上,错误记录在日志中。

  1. 自定义脚本处理错误

应用:

/**

*@param $level 错误的类别

*@param $msg 错误的信息

*@param $file 错误的文件

*@param $line 错误的行号

*/

function error($level,$msg,$file,$line) {

switch($level) {

case E_NOTICE:

case E_USER_NOTICE:

echo ‘屏蔽此错误<br>’;

break;

case E_WARNING:

case E_USER_WARNING:

echo ‘将错误记录在日志中<br>’;

break;

case E_ERROR:

case E_USER_ERROR:

echo ‘发邮件<br>’;

break;

}

echo ‘错误信息:’.$msg,'<br>’;

echo ‘错误文件:’.$file,'<br>’;

echo ‘错误行号:’.$line,'<hr>’;

}

set_error_handler(‘error’); //注册错误处理函数

trigger_error(‘自己触发的错误’);

trigger_error(‘警告’,E_USER_WARNING);

trigger_error(‘错误’,E_USER_ERROR);

更改PHP配置

  1. php.ini文件,所有的虚拟主机全部有效,需要重启服务器
  2. .htaccess文件,在当前目录及子目录下有效,不需要重启服务器
  3. ini_set():当前页面中有效,不需要重启服务器

HTTP错误编

1xx(临时响应)

2xx(成功)

3xx(重定向)

4xx(请求错误)

5xx(服务器错误)

需要记忆的编码

  1. 200 – 成功
  2. 301-永久移动
  3. 302-临时移动
  4. 403-拒绝访问
  5. 404 – 请求的网页不存在
  6. 500—服务器内部错误
  7. 502—网关错误

数组的指针

指针的介绍

  1. 指针本质是一个变量,保存指向某个元素的地址
  2. 默认情况下打开一个数组,指针指向数组的第一个元素

  1. foreach的流程图

操作指针的函数

key():返回当前指针的键

current():返回数组中的当前单元

next():指针下移一位

prev():指针倒回一位

reset():指针初始化

end():指针指向最后一位

通过for循环遍历数组

  1. 从前往后遍历数组

  1. 从后往前遍历数组

each()

作用:返回当前的键值并且指针向前移动一位,如果到了数组的末端返回false

each()=current()+key()+next()

each()返回4个元素的数组,既有索引数组又有关联数组,键的下标是0和key,值的下标是1和value。

通过while循环遍历数组

常用的函数

操作数组的函数

  1. range(起始值,结束值,[步长=1]),生成指定范围的数组
  2. array_merge():数组合并

  1. array_rand():数组中随机取出一个或多个单元
  2. shuffle():打乱数组

  1. in_array():检查数组中是否存在某个值
  2. is_array():检测变量是否是数组

  1. array_keys():返回数组中所有的键名
  2. array_values():返回数组中所有的值

  1. explode():将字符串分割成数组
  2. implode():将一个一维数组的值转化为字符串

  1. array_diff():数组相减
  2. array_intersect():数组相交

字符串操作函数

  1. 字符串可以看成是字符的集合,可以通过[]来访问字符串(不能操作中午)

  1. strlen():获取字符串长度,以字节为单位

  1. strpos():查找子字符串在字符串第一次出现的位置
  2. strrpos():查找子字符串在字符串最后一次出现的位置

  1. str_repeat():字符串重复

  1. substr()

  1. strchr()和strstr()是一样的:从第一次出现的字符串开始截取,一直截取到最后
  2. strrchr():从最后一次出现的字符串开始截取,一直截取到最后

  1. str_replace():字符串替换

  1. str_split():把字符串分割成数组

  1. strtolower():将字符串转成小写
  2. strtoupper():将字符串转成大写
  3. ucfirst():首字母大写

  1. trim():去字符串两边的空格
  2. ltrim():去字符串左边的空格
  3. rtrim():去字符串右边的空格
  4. nl2br():将\n转成<br>

  1. htmlentities():实体转换

多字节处理

PHP默认不支持多字节处理,需要在php.ini中开启多字节处理。

mb_扩展都是以字符为单位。

算法

冒泡排序

思想:从第0个和第1个数比较,第1个数和第2个数比较,以此类推,第i和和第i+1个数比较,满足条件就交换。

<?php

$num=array(140,20,52,78,12,45,105,56,23);

/*

//第一次循环

for($i=0;$i<count($num)-1;$i++){

if($num[$i]>$num[$i+1]){

$temp=$num[$i];

$num[$i]=$num[$i+1];

$num[$i+1]=$temp;

}

}

//第二次循环

for($i=0;$i<count($num)-2;$i++){

if($num[$i]>$num[$i+1]){

$temp=$num[$i];

$num[$i]=$num[$i+1];

$num[$i+1]=$temp;

}

}

//第三次循环

for($i=0;$i<count($num)-3;$i++){

if($num[$i]>$num[$i+1]){

$temp=$num[$i];

$num[$i]=$num[$i+1];

$num[$i+1]=$temp;

}

}

print_r($num);

//剩下以此类推

*/

//分析

/**

*初始数据

第一次 20,52,78,12,45,105,56,23,(140)

第二次 20,52,12,45,78,56,23,(105,140)

第三次 20,12,45,52,56,23,(78,105,140)

以此类推

*/

//实现代码

for($n=1;$n<count($num)-1;$n++){ //总共要循环几次

for($i=0;$i<count($num)-$n;$i++){

if($num[$i]>$num[$i+1]){

$temp=$num[$i];

$num[$i]=$num[$i+1];

$num[$i+1]=$temp;

}

}

}

print_r($num);

选择排序

思想:第0个数和其他的数比(确定一个数),第1个数和其他剩余的数(再确定一个数),第2个和其他的数比,以此类推

<?php

$num=array(140,20,52,78,12,45,105,56,23);

/**

*分析:140,20,52,78,12,45,105,56,23

第一次 (12),140,52,78,20,45,105,56,23

第二次 (12,20),140,78,52,45,105,56,23

第三次 (12,20,23),140,78,52,105,56,45

以此类推

//第一次循环

for($i=1;$i<count($num);$i++){

if($num[0]>$num[$i]){

$temp=$num[0];

$num[0]=$num[$i];

$num[$i]=$temp;

}

}

//第二次循环

for($i=2;$i<count($num);$i++){

if($num[1]>$num[$i]){

$temp=$num[1];

$num[1]=$num[$i];

$num[$i]=$temp;

}

}

//第三次循环

for($i=3;$i<count($num);$i++){

if($num[2]>$num[$i]){

$temp=$num[2];

$num[2]=$num[$i];

$num[$i]=$temp;

}

}

//依次类推

print_r($num);

*/

//实现代码

for($n=0;$n<count($num)-1;$n++){ //循环的次数

for($i=$n+1;$i<count($num);$i++){//数据交换

if($num[$n]>$num[$i]){

$temp=$num[$n];

$num[$n]=$num[$i];

$num[$i]=$temp;

}

}

}

print_r($num);

快速排序

思想:以第0个数为标准,比它小的放左边,比它大的放右边

分析:

原始数据

第一次排序,以60为标准,比60小排左边,比60大排右边,这个数组分成了2数组

第二次排序:将分成的两个数组再执行和第一次排序一样的动作

以此类推

实现代码

<?php

$num=array(140,20,52,78,12,45,105,56,23);

function mysort($arr) {

$len=count($arr); //数组的长度

if($len==0 || $len==1)//如果数组为空或就一个数据,直接将数组返回

return $arr;

$temp=$arr[0]; //以第0个数为标准

$small=$big=array(); //声明两个数组

for($i=1;$i<$len;$i++){

if($arr[$i]<$temp)

$small[]=$arr[$i];

else

$big[]=$arr[$i];

}

$small_array=mysort($small); //递归调用

$big_array=mysort($big); //递归调用

return array_merge($small_array,array($temp),$big_array);//数组合并

}

//调用

print_r(mysort($num));

标签: http 错误编号冒泡排序多字节处理快速排序数组指针算法选择排序错误处理
上一篇文章

JS初级(一)变量、 声明、 引用、 数据类型、 输出、 运算符

下一篇文章

PHP 语法(四)二分法、 传参、 全局变量、 函数、 匿名函数、 变量作用域、 变量生命周期、 终止脚本、 递归、 静态变量

下一篇文章
PHP 核心编程(二)Mysql 扩展、 数据库连接、 笑话增删改查

PHP 语法(四)二分法、 传参、 全局变量、 函数、 匿名函数、 变量作用域、 变量生命周期、 终止脚本、 递归、 静态变量

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3