码迷,mamicode.com
首页 > Web开发 > 详细

php基础知识

时间:2015-10-30 00:46:25      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

回顾

 

函数: 形参默认值, 返回值

作用域: 全局作用域(全局变量)和局部作用域(局部变量)

跨域访问变量: 引用传递, $GLOBALS, global关键字

 

匿名函数: 没有函数名,变量访问(可变函数)

可变函数: 一个变量保存的值是函数名.

 

伪类型: number,mixed,void,callback

 

数据类型判断: PHP不应该相信任何外来数据

数据类型转换: 自动转换和手动(强制转换)转换

 

文件包含: 代码复用, HTML布局

四种方式: include和include_once,require和require_once

包含形式: 向上包含和向下包含

路径管理: 绝对路径和相对路径(./ ../ 和 /)

 

系统函数

字符串函数(都是以字节为单位操作数据)

时间日期函数

数学函数

 

需求: 描述个人信息

$name = ‘张三’;

$age  = 18;

$sex  = ‘男’;

...

 

数组

数组就像一个书包可以放很多东西

  1. 什么是数组?

数据的组合: 可以有多个数据

 

定义数组

PHP中提供了多种方式给用户定义数组

 

方案1: PHP提供了一个关键字结构: array(), 可以将数据直接挨个存放到array()括号当中,使用逗号分隔: 如果是字符串数据,需要使用引用包裹.

Array(数据1,数据2.....);

 

 

方案2: PHP也支持使用[]作为数组边界符号来定义数组

[元素1,元素2.....];

 

 

方案3: 在PHP中, 如果变量后面跟一个中括号[],系统会自动将当前变量解析成数组

$变量[] = 值; //[]中括号就是数组的下标: 系统即便在没有内容的情况下也会自动使用数值填充

 

 

访问数组

数组的访问必须通过数组元素的下标才能找到.

$变量名[元素下标];

 

 

注意: 有的是PHP数组的下标不一定是数值,有可能是字符串, 那么在进行访问的时候,需要使用引号将键名包裹起来.--如果是字符串就要用引号

 

 

数组特点

 

  1. PHP中数组的元素的数据类型可以是任意类型(PHP是弱类型)
  2. PHP中数组的下标(键名)可以是数值或者字符串
  3. PHP中数组的长度(元素的个数)理论上不限制

 

 

数组分类

PHP中数据因为元素的下标(键名)有多种类型: 数值和字符串,php根据下标对数组进行了分类.

 

 

索引数组: 数组的下标全部是数值

关联数组: 数组的下标全部是字符串

混合数组: 数组的下标有数值也有字符串

 

 

数组遍历

 

数组的元素的访问是通过下标实现: 只要能够获得所有的下标,就可以得到所有的元素.

索引数组: 下标是从0开始,依次递增: 只需要得到数组的长度即可使用for循环遍历.

 

For循环遍历数组

前提条件: 索引数组,而且获取数组的长度.

Count(): 获取数组的长度的

 

 

Foreach循环遍历数组

Foreach是PHP提供的专门用来遍历复合数据类型的循环.

Foreach利用了数组内部的指针操作: 数组的内部有多个元素,元素之间的移动是通过”指针实现”: 数组元素的要被访问,除非有一个”门”为它打开, 整个数组中只有一扇”门”, “门”在哪哪个元素就可以被访问. 默认的数组的元素中”门”一开始都在第一个元素对应的位置.

 

Foreach基本语法

Foreach(数组变量 as [保存下标的变量 => ]保存值的变量){

//可以通过访问保存下标的变量和保存值的变量来实现对数组元素的下标以及值的访问

//数组元素的”门”得移动: “门”移到一个不存在的元素位置(数组最后)

}

 

 

 

Foreach工作原理

 

Foreach是一种指针操作,操作流程如下.

  1. 重置指针: 将指针指向数组的第一个元素
  2. 判断当前指针所指向的元素是否有效

a)         无效: 循环结束

b)        有效: 继续

  1. 获取当前指针所指向元素的下标和值(看情况)
  2. 将下标保存到对应的下标变量中,将值保存到对应的值变量中
  3. 进入到foreach循环(循环体)
  4. 当循环结束: 将数组的指针下移
  5. 重复2-6

 

 

二维数组

理论上讲: 二维数组是需要一个平面,在内存中分配内存的时候是需要指定一块区域.

但是在PHP中不存在理论上的二维数组.

 

PHP中二维数组: PHP数组元素可以是任意数据类型, 元素值本身可以是一个数组: 数组中元素值刚好又是一个数组的数组称之为二维数组.

 

 

二维数组元素访问: 通过下标,先通过下标找到一维数组的元素(数组),再通过二维的下标访问真正的目标元素.

 

 

 

二维数组遍历: 只遍历一维数组: 遍历出来的结果通常是一个关联数组: 可以直接通过键名

 

 

Each函数

Each: 每一个的意思

 

Each(): 从一个数组中取出当前数组指针所指向的元素: 元素有下标和值两个部分, 返回一个拥有四个元素的数组: 元素的值和下标一定会出现两次(两个索引,两个关联): 同时将数组指针下移,如果指针已经移动到最末尾: 那么返回的结果是false.

 

 

指针下移

 

 

Each如果在指针移动到数组的最后(移出数组): 返回false

 

 

 

Each通常不会单独使用,搭配list的结构

List结构

List结构: 是一种批量给变量赋值: 能够根据变量要赋值的个数,从对应的数组中去取出对应的元素,将元素值依次赋值给对应的变量.

 

List(变量1,变量2....) = 数组;     //从数组中取出多个元素赋值给变量列表

 

  1. List结构取元素,只能取出下标从0开始的索引数组
  2. List结构为多个变量赋值的时候,只能从0开始,然后依次递增
  3. 变量列表必须小于数组中顺序的索引元素的列表

 

 

 

List通常搭配each: each取得的结果中一定会有一个从0开始的下标元素,1对应的元素

 

 

课堂作业: 使用while循环+list结构+each函数,遍历数组

 

数组函数

 

指针操作函数

Key: 获取当前指针所在位置的元素下标, 如果不存在返回null

Current: 获取当前指针所在位置的元素值,如果不存在返回false

 

Next: 指针下移,并返回下一个元素的值

 

Prev: 指针上移,并返回上一个元素的值

 

Next或者prev只能按照自己的方向移动,但是如果指针已经移出数组: next或者prev都没有办法移回来: 只能使用重置(reset和end);

 

 

end : 将指针移到最后一个元素, 并返回最后一个元素的值

 

Reset: 将指针移动到首位

 

 

指针实现数组循环遍历

 

 

 

array_keys: 获取一个数组中所有的元素下标,返回一个索引数组

 

array_values: 获取一个数组中所有的元素值,返回一个索引数组

 

 

 

数据结构模拟

数据结构和算法是程序的核心.

 

数据结构: 数据的存储方式, 如栈, 队列,哈希,二叉树,完全二叉树等等

算法: 代码,高效的检索数据的代码

 

PHP没有数据结构: 底层的C语言已经将数据结构封装

 

两种简单数据结构: 栈和队列

栈: 先进后出(First In Last Out)

队列: 先进先出(First In First Out)

 

利用数组模拟栈和队列

Array_shift(): 从数组的”头部”取出元素,数组会变短(数组左边)

Array_unshift(); 从数组”头部”添加元素, 返回数组的长度

Array_push(): 从数组的”尾部”添加元素(右边)

Array_pop(): 从数组的”尾部”弹出元素

 

 

数组模拟栈: 从右边进,从右边出

 

课堂作业: 模拟栈(左边进左边出)

 

数组模拟队列: 左边进,右边出

 

 

数组字符串转换函数

Explode: 爆炸, 将字符串按照某个指定的规则,进行分开, 变成一个数组

 

 

 

Implode: 聚合, 将数组的元素按照某个指定的规则进行拼接,变成字符串

 

 

 

验证码制作

验证码: Captcha,用来区分计算机和人的: 本质是印在图片上的随机字符串

 

通过数组产生随机字符串.

 

  1. 生成一个完整的数组: 大写字母,小写字母,数字(61)

a)         使用range产生数据源

Range(): 产生一个指定范围内的数组,按照ASCII码表

 

B)    合并对应的数据源: array_merge: 合并数组,而且会重新更新下标

 

 

2. PHP数组没有提供一个能够直接从数组中随机取出指定数量元素的函数: 但是提供了一个能够随机取出指定数量下标的函数: array_rand(): 取出指定下标

 

3. 将随机的下标变成对应的元素值.

 

4. Array_rand数组获取到的数据会自动排序: 升序排序: 应该讲数组里面的顺序给打乱: shuffle(): 打乱数组中元素的顺序

 

 

 

数组运算

 

数组运算: 多个数组进行合并: 合并的方式有两种: +和array_merge

 

+:

  1. 以左边数组为基础: 全部保留
  2. 判断右边的元素:

a)         如果右边元素的下标与左边已有元素相同: 那么忽略

b)        如果右边元素的下标与左边已有元素不同: 追加到左边数组后面

 

 

Array_merge:

  1. 以左边数组为基础: 先留住
  2. 判断右边元素:

a)         如果右边元素的下标(字符串)与左边已有元素相同: 那么覆盖

b)        如果右边元素的下标(字符串)与左边元素不同: 追加

c)         所有的索引下标的元素全部保留: 重建索引(包括第一个数组元素)

 

 

数组比较

数组比较没什么用: 需要了解比较的机制是什么.

 

比较机制: ==和 ===

  1. 数组元素的个数: 长度比较
  2. 比较元素的下标以及对应的值
  3. 比较数组元素出现的顺序
  4. 比较数组元素的类型

 

 

 

算法

PHP不做算法: PHP底层是C语言,已经使用了算法.

 

排序算法: 冒泡排序, 选择排序, 插入排序, 快速排序

 

冒泡排序

冒泡排序: 排序的内容是泡, 泡有大有小, 大的浮力更大, 升的越快: 随着时间的推移, 大的在最上面,小的在最下面: 形成顺序排序.

 

冒泡排序: bubble sort

 

冒泡排序原理: 针对的是数值数组, 要进行多轮排序: 一轮只能选出一个最大的泡: 一轮就是一次数组遍历(循环遍历); 需要重复多轮(数组长度 -1)

 

 

代码实现: 需要双层循环: 外层循环决定轮数, 内存循环用来交换大泡

 

php基础知识

标签:

原文地址:http://www.cnblogs.com/IT-Computer-TcpIp/p/4922107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!