Hexo

  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Schedule

mysql05-字符集及其设置

Posted on 2019-02-01 | In mysql

字符集

字符编码概念

字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
在计算机中所看到的任何内容都是字符构成的。
字符编码是计算机针对各种符号,在计算机中的一种二进制存储代号

字符集概念

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。

设置客户端所有字符集

如果直接通过cmd下的mysql.exe进行中文数据插入,那么可能会出错

出错原因 :

  1. 用户是通过mysql.exe来操作mysqld.exe
  2. 真正的sql执行是mysqld.exe来执行
  3. mysql.exe将数据传入mysqld.exe的时候,没有告知其对应的符号规则(字符集),而mysql也没有能力自己判断,就会使用自己默认的(字符集)

解决方案

mysql.exe客户端在进行数据操作之前将自己所使用的字符集告诉mysqld
cmd下的mysql.exe默认都只有一个字符集:GBK

mysql如何告知mysql.exe对应的字符集类型为gbk?
快捷方式:set name 字符集
让mysql.exe告知mysqld.exe自己的字符集规则

重新进行数据插入:中文(GBK)


深层原理:客户端,服务器,连接层

mysql.exe与mysqld.exe之间的处理关系一共分为三层
客户端传入数据给服务器:client:character_set_client
服务器返回数据给客户端:server:character_set_results
客户端与服务器之间的连接:connection: character_set_connection

set names字符集的本质就是一次性打通三层关系的字符集,变得一致

在系统中有三个变量来记录着这三个关系对应的字符集:
show variable like ‘char actor_set%’

查看一个新的客户端的对应的字符集关系

对比如图

修改服务器端变量的值
set 变量名=值



我们可以发现插入可以完成,输出时乱码



此时,修改结果字符集为gdk

发现已经能正确识别中文


connection只是为了更方便客户端进行字符集转换而设

总结

set names gbk
等价于
set character_set_client = gbk //为了让服务器识别客户端发来的数据
set character_set_connection = gbk //更好的帮助客户端与服务端之间进行字符集转换
set character_set_results= gbk //为了告诉客户端服务器所有的返回的数据字符集

mysql04-数据操作

Posted on 2019-02-01 | Edited on 2019-02-22 | In mysql

数据操作

插入操作

本质含义:将数据以SQL的形式,存储到指定的数据表(字段)里面

方式1

基本语法:
insert into 表名[(字段列表) ]values(对应字段列表)


注意:

1.后面(values中)对应的值列表只需要与前面的字段列表相对应即可(不一定与表结构完全一致)

2.字段列表不一定非要由所有的表中字段



以上两点说明:只要前后对应好就可以了

方式2

基本语法: 向表中所有字段插入数据 //此时值列表必须与字段列表一致
insert into 表名 values(对应表结构)

查询操作

查询表中全部数据:select * from 表名; //表示匹配所有字段

查询表中部分字段: select字段列表 from 表名; //字段列表使用逗号“,”隔开

简单条件查询数据 select 字段列表/
from 表名 where 字段名=值
//MySQL中没有==符号表示相等

删除操作

基本语法:delete from 表名 【where 条件】;
如果没有where条件,会自动删除该表所有数据(慎用)

更新操作

更新:将数据进行修改(通常是修改部分字段数据)
基本语法:update 表名 set字段名 =新值【where 条件】
如果没有where条件,那么所有的表中对应的那个字段都会被修改成统一值

Untitled

Posted on 2019-01-31
mysql02-数据库基本操作

layout: new
title: mysql02-数据库基本操作
date: 2019-01-31 17:30:06
tags:
categories: mysql


数据库基本操作

数据库是数据存储的最外层(最大单元)

创建数据库

基本语法:creat database数据库名字[库选项]

库选项:数据库的相关属性
字符集:charset字符集,代表着当前数据库下的所有表存储的数据默认指定的字符集(如果当前不指定,那么采用DBMS默认的)
校对集:collate校对集
例如: create database数据库名字 charset 字符集名称

显示数据库

每当用户通过sql指令创建一个数据库,那么系统就会产生一个对应的存储数据的文件夹(data)

其实每一个数据库文件夹下面都有一个opt文件,保存的是对应的数据库选项

显示全部

基本语法 :show databases

显示部分

基本语法:show database like ‘匹配模式’
_:匹配当前位置单个字符
%:匹配指定位置多个字符
例:
获取以my开头的全部数据库:‘my%’
获取以m开头,后面第一个字母不确定,最后为database的数据库‘m_database’
获取以database结尾的数据库: ‘%database’

显示数据库创建语句

基本语法:show create databases 名字

选择数据库

为什么要选择数据库?因为数据存储到数据表,表存在数据下。如果要操作数据,那么必须进入到对应的数据库才行
基本语法:use 数据库名字;

修改数据库

修改数据库字符集(库选项):字符集和校队集
基本语法:alter

一旦修改成功那么对应的opt文件中就会体现

是否可以修改数据库名字?mysql 5.5之前是可以修改的:rename命令;但是5.5之后就不可以。

删除数据库

基本语法:drop database 数据库名字

mysql03-数据表操作

Posted on 2019-01-31 | Edited on 2019-02-25 | In mysql

数据表操作

创建数据库

普通创建表

基本语法:create table 表名(字段名 字段类型 【字段属性】, 字段名 字段类型 【字段属性】,…表选项)

以上错误说明:表必须放到对应的数据库下



有两种方式可以将表挂入到指定的数据库下

  1. 数控表名字前面加上数据库名字,用“.”连接即可:数据库.数据表


  2. 在创建数据表之前先进入到某个具体的数据库即可:use数据库名字



表选项:与数据库选项类似
engine:存储引擎,mysql提供的具体存储的方式,默认有一个innodb(5.5以前默认myisam)
charset:字符集,只对当前自己表有效(级别比数据库高)
collate:校队集

复制已有表机构

从已经存在 表赋值一份(只复制结构:如果表中有数sue据不复制)
基本语法:create table 新表名 like 表名 //只要使用数据库.表名,就可以在任意数据库下访问其他数据库表名

复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,…….) SELECT 字段1,字段2,…… FROM 旧表

显示数据表

每当一张数据创建,那么就会在对应的数据库下创建一些文件(与存储引擎有关)

注意:这个结构文件来自于innodb存储引擎,innodb存储引擎所有的存储在外部的ibdata文件中

显示所有表

基本语法 : show tables

匹配显示表

基本语法: show tables like ‘匹配模式‘;

显示表结构

本质含义:显示表中所包含的字段信息(名字,类型,属性等)
describe表名
desc表名
show columns from 表名

显示表创建语句

查看数据表创建时的语句:此语句看到的结果已经不是用户之前自己输入的。
基本语法:show create table 表名



语句结束符
;与\g所表示的效果是一样的,都是字段在上排横着,下面跟对应的数据
\G 字段在左侧竖着,数据在右侧横着

设置表属性

表属性值得就是表的选项:engine charset和collage
基本语法 alter table 表名 表选项【=】值



注意:如果数据库已经确定了,里面有很多数据了,不要轻易修改表选项(字符集影响不大)

修改表结构

数据库中数据表名字通常由前缀:取数据库的前两个字母加上 下划线

修改表名

rename table 旧表名 to 新表名

修改表选项

alter table 表名 表选项【=】值
(与设置表属性相同)

新增字段

alter table 表名 add 【column】 新字段名 列类型【列属性】【位置first/after字段名】



字段位置:字段想要存放的位置
first:在某某之前(最前面),第一个字段
after 字段名:放在某个具体的字段之后

修改字段名

alter table 表名 change 旧字段名 新字段名 字段类型【列属性】【新位置】

修改字段类型(以及属性)

alter table 表名 modify 字段名 新类型 【新属性】【新位置】

删除字段

alter table 表名 drop 字段名

删除表结构

基础语法:drop table 表名【,表名2…】

可以同时删除多个表(对数据库不能这么操作)

mysql02-数据库基本操作

Posted on 2019-01-31 | In mysql

数据库基本操作

数据库是数据存储的最外层(最大单元)

创建数据库

基本语法:creat database数据库名字[库选项]

库选项:数据库的相关属性
字符集:charset字符集,代表着当前数据库下的所有表存储的数据默认指定的字符集(如果当前不指定,那么采用DBMS默认的)
校对集:collate校对集
例如: create database数据库名字 charset 字符集名称

显示数据库

每当用户通过sql指令创建一个数据库,那么系统就会产生一个对应的存储数据的文件夹(data)

其实每一个数据库文件夹下面都有一个opt文件,保存的是对应的数据库选项

显示全部

基本语法 :show databases

显示部分

基本语法:show database like ‘匹配模式’
_:匹配当前位置单个字符
%:匹配指定位置多个字符
例:
获取以my开头的全部数据库:‘my%’
获取以m开头,后面第一个字母不确定,最后为database的数据库‘m_database’
获取以database结尾的数据库: ‘%database’

显示数据库创建语句

基本语法:show create databases 名字

选择数据库

为什么要选择数据库?因为数据存储到数据表,表存在数据下。如果要操作数据,那么必须进入到对应的数据库才行
基本语法:use 数据库名字;

修改数据库

修改数据库字符集(库选项):字符集和校队集
基本语法:alter

一旦修改成功那么对应的opt文件中就会体现

是否可以修改数据库名字?mysql 5.5之前是可以修改的:rename命令;但是5.5之后就不可以。

删除数据库

基本语法:drop database 数据库名字



删除时,一定要注意安全操作
删除数据库之后:对应的文件夹会被删除(opt文件也会被删除)

mysql01-相关基本概念

Posted on 2019-01-30 | Edited on 2019-02-01 | In mysql

数据库分类

网络数据库

层级数据库

有且只有一个根节点

关系数据库

是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据中的数据。
数据库的另外一种区分方式:基于存储介质
存储介质:磁盘和内存

关系型数据库:存储在磁盘中

非关系型数据库,存储在内存中

关系型数据库

基本概念:
关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成

  • 关系数据结构:
    指的是数据以什么方式来存储是一种二维表的形式存储
    本质:二维表
  • 关系操作集合:
    如何来关联和管理对应的存储数据,sql指令
  • 关系完整性约束:
    数据内部有对应的关联关系,以及数据与数据之间也有对应的关联关系
    表内约束:对应的具体列表只能放对应的数据(不能乱放)
    表间约束:自然界各实体都是有着对应的关联关系(外键)

  • 典型关系数据库
    小型关系型数据库Microsoft Access,sqlite
    中型关系型数据库 Microsoft SQL serve,MySQL
    大型关系数据库 Oracle、DB2

sql介绍

结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ “S-Q-L”),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

sql就是专门为关系型数据库而设计出来的

一:数据查询语言(DQL:Data Query Language):

其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。

专门用于查询数据,代表指令为select/show

二:数据操作语言(DML:Data Manipulation Language):

其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
专门用于写数据:代表指令为insert,update和delete

三:事务处理语言(TPL):

它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
(不是所有的关系型数据库都提供事务安全处理)
专门用于事务安全处理,transaction

四:数据控制语言(DCL):

它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
专门用于权限管理,代表指令为grant和revoke

五:数据定义语言(DDL):

其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
它是专门用于结构管理:代表指令 create和drop(alter)

六:指针控制语言(CCL):

它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作

mysql是一个关系型数据库管理系统

1.是一种开源免费的数据库产品
2.mysql对PHP的支持是最好的(wamp或者lamp)
MySQL中用到的操作指令就是sql’指令

mysql服务端的架构

mysql服务端架构有以下几层构成

  1. 数据库管理系统(最外层):DBMS,专门管理服务器端的所有内容
  2. 数据库(第二层):DB,专门用于存储数据的仓库(可以有很多个)
  3. 二维表(第三层):table,专门用于存储具体实体的数据
  4. 字段(第四层):filed,具体存储某种类型的数据(实际存储单元)
    数据库中常用的几个关键字
    row:行
    column:列(filed)
    ysql是一种C/S结构,客户端和服务器
    服务器对应的软件:mysqld.exe

    启动服务

    命令行方式
    通过windows下打开cmd控制器,然后使用命令进行管理
    net.start服务:开启服务
    net stop mysql:关闭服务
    前提是:在安装mysql 的时候将mysql添加到windows的服务去了
    方式1进入服务




方式2进入服务:通过命令行:services.msc

通过服务对mysql服务器进行管理

登入和提出mysql系统

通过客户端(mysql.exe)与服务器进行连接认证,就可以进行操作
通常,服务端与客户端不在同一台大电脑上

登录

1.找到mysql(通过cmd控制台:如果在安装的时候指定了mysql.exe所在的路径为环境变量就可以直接访问;如果没有,那么就必须进入到mysql所在的安装目录底下的bin)
2.输入对应的服务器地址:-h :host -h[IP地址/域名]
3.输入服务器中mysql监听的端口:-P(大写):post -P:3306
4.提供输入用户名:-u:username -u:root
5.输入密码:-p(小写):password -p:root

连接认证基本语法:

mysql.exe/mysql (空格) -h主机地址 (空格) -P端口 (空格) -u用户吗 (空格)-p 密码

注意事项:

  1. 通常端口都可以默认:mysql监听的端口通常都是3306
  2. 密码的输入可以先输入-p,直接换行,然后再以密文方式输入密码

退出

断开与服务器的连接:通常mysql提供的服务器数量有限,一旦客户端用完,建议就应该断开连接

建议方式:使用sql提供的指令
exit; //exit带封号
\q

quit

mysql服务端的架构

mysql服务端架构有以下几层构成

  1. 数据库管理系统(最外层):DBMS,专门管理服务器端的所有内容
  2. 数据库(第二层):DB,专门用于存储数据的仓库(可以有很多个)
  3. 二维表(第三层):table,专门用于存储具体实体的数据
  4. 字段(第四层):filed,具体存储某种类型的数据(实际存储单元)

    数据库中常用的几个关键字

    row:行
    column:列(filed)

PHP基础11-文件包含

Posted on 2019-01-30 | In PHP基础

文件包含原理

文件加载原理

php代码的执行流程

  1. 读取代码文件(PHP程序)
  2. 编译:将PHP代码转换成字节码(生成opcode)
  3. zendengine来解析opcode,按照字节码去进行逻辑运算
  4. 转换成对应的html代码

    文件加载原理

  5. 在文件加载(include或者require)的时候,系统会自动的将被包含文件中的代码相当于嵌入到当前文件中
  6. 加载位置:在哪加载,对应的文件中的代码嵌入的位置,就是对应的include的位置
  7. 在PHP中被包含的文件是单独进行编译的

php文件在编译的过程中如果出现了语法错误,那么会失败(不会执行)但是如果被包含文件有错误的时候,系统会在执行到include这条语句的才会报错

include和include_once的区别(require和require_once的区别相同)

include 系统碰到一次,执行一次;如果对同一个文件进行多次加载,那么系统会执行多次

//系统提示常量重名


include_once 系统碰到多次也只会执行一次,如果文件已被包含过,则不在执行

系统发现已经被包含过,故不执行包含文件,没有报错

require和include的区别:本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样

include的错误级别较轻,不会影响后面代码的执行



reqire的错误级别较高,会影响后面代码的执行

文件加载路径

文件在加载的时候需要指定文件路径才能保证PHP正确的找到对应的文件
文件的加载路径包含两大类

绝对路径

  1. 从磁盘的根路径开始(本地绝对路径)
    windows:盘符(如C):/路径/PHP文件
    linux:/路径/PHP文件
  2. 从网站的跟目录开始(网络绝对路径)
    /:相对于网站主机名字对应的路径
    localhost/index.php->假设E:/server/apache/htdocs/index.php

    相对路径:从当前文件所在的目录开始的路径

    .或者./都表示当前文件夹
    ../表示上级目录(当前文件夹的上一层文件夹)

    对比

    1.绝对路径相对效率偏低,但是相对安全(路径不会出问题)
    2.相对路径相对效率高些,但是容易出错(相对路径会发生改变)

文件嵌套包含

文件嵌套包含:一个文件包含另外一个文件,同时被包含文件又包含了另一个文件



嵌套包含的时候容易出现相对路径出错的问题:相对路径会因为文件的包含而改变(./或者../):windows下,每一个文件夹都有.和 ..的文件夹



如果去掉./ 就不会出错

PHP基础10-数组排序与查找(简)

Posted on 2019-01-30 | In PHP基础

冒泡排序

选择排序

插入排序

快速排序

递归调用:不断的将数据切成三块,值<a的数组 ,a,值>a的数组

归并排序

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

二路归并



归并算法代码

查找算法

查找算法:
1.顺序查找
2.二分法查找

PHP基础09-数组遍历

Posted on 2019-01-29 | Edited on 2019-01-30 | In PHP基础

PHP数组遍历
(大致整理出三种)

foreach遍历语法

基本语法如下:

foreach ($arr as $value)
statement
!
或者:

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

//通过 $下标 访问元素的下标,通过 $值 访问元素的值
通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值

在进行数据存储定义的时候,通常二维数组不会两个维度的key下标为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所有在进行遍历的时候通常是针对一维数组进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问。


foreach遍历原理

foreach遍历的原理:本质是数组的内部有一个指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。
1.foreach会重置指针:让指针指向第一个元素;
2.进入foreach循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量$key中(如果存在),将值取出来放到对应的值变量$value中;然后指针下移
3.进入循环内部(循环体)开始执行
4.重复2和3,直到在2的时候遇到指针取不到内容

for循环遍历数组

for循环基于已知边界条件,有条件的变化

  1. 获取数组长度:count(数组)得到数组元素的长度
  2. 要求数组元素的下标是规律的数字


    for+next也能完成遍历数组(可以是下标非规律数字的数组)
    有这样一个数组:

$arr = array( 12, 5, ‘aa’=>8, 6=>10, ‘bb’=> 3, 4);
不使用“foreach”,而是使用for循环,将他遍历输出每一项的下标和值!

each和list

each函数:能从一个数组中获取当前那数组指针指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:
0->key 取得元素的下标值
1->取得元素的值
key->取得元素的下标值
value->取得元素的值



list函数使用:list是一种结构,不是一种函数(没有返回值),是list提供一对变量从一个数组中取得元素值,然后依次存放到对应变量当中(批量为变量赋值:值来源于数组)list必须从索引数组中去获取数据,而且必须从0开始

each和list配合:each返回的数组中必定有下标0和1分别表示下标和值

PHP基础08-数组及其相关函数

Posted on 2019-01-29 | In PHP基础

数组

数组:arrary,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器的所有数据

数组定义语法

在PHP中系统提供多种定义数组的方式
array( key => value , … )

  1. 使用array关键字:最常用的$变量=array{元素1,元素2,…}//默认0开始
  2. 可以使用中括号来包裹数据(用 [] 替代 array()。):$变量=[元素1,元素2,…]
  3. 隐形定义数组:
    $变量[]=值 //如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的 键名将是该值加一。
    $变量[下标key]=值 // 键(key)可是是一个整数 integer 或字符串string

PHP数组特点

  1. 可以整数下标或者字符串下标
    如果数组下标都为整数:索引数组
    如果数组下标都为字符串:关联数组
  2. 不同下标可以混合存在,混合数组
  3. 数组元素的顺序以放入顺序为准,跟下标无关
  4. 数组下标的自增长性
  5. 特殊值下标的自动转换
    • 包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。
    • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
    • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
    • Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
    • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
  6. PHP中数组元素没有长度类型
  7. PHP中的数组是很大的数据,所有存储位置是堆区,为当前数组分配一快连续的内存。
  8. 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖

数组的相关函数

排序函数:对数组元素进行排序,都是按照ASCII,可以进行英文比较

sort {}顺序排序(下标重排)
sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 直接对数组操作,返回值为boole(true或false)
参数:

  • array:要排序的数组。
  • sort_flags: 可选的第二个参数 sort_flags 可以用以下值改变排序的行为:
    排序类型标记: 
        •    SORT_REGULAR - 正常比较单元(不改变类型) 
        •    SORT_NUMERIC - 单元被作为数字来比较 
        •    SORT_STRING - 单元被作为字符串来比较 
        •    SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。 
        •    SORT_NATURAL - 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。 
        •    SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。 
    
    rsort():逆序排序
    asort()顺序 //数组的索引保持和单元的关联
    arsort()逆序
    ksort()顺序排序:按照键名(下标)排序 //保留键名到数据的关联
    krsort()逆序
    shuffle()随机打乱数组元素,不保留对应关系

指针函数:

reset() 重置指针,将内部指针倒回到第一个单元并返回第一个数组单元的值
end()重置指针,数组内部指针移动到最后一个单元并返回其值。
next()指针下移,它返回的是下一个数组单元的值
prev()指针上移
current()获取当前指针对应的值
key()获取当前指针对应的下标
//注意:next和prve会移动指针,有可能导致指针移动都边界(离开数组),导致数组不能使用(通过next和prve不能回到正确的位置)只能通过end或者reset进行指针重置

其他函数

count(mixed $array_or_countable [, int $mode = COUNT_NORMAL ])
//如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。

统计出数组里的所有元素的数量,或者对象里的东西。

array_push

array_push(array &$array , mixed $value1 [, mixed $… ])
将一个或多个单元压入数组的末尾(入栈)

array_pop

弹出并返回 array 数组的最后一个单元(被弹出去的),并将数组 array 的度减一。 (出栈)
//Note: 使用此函数后会重置(reset())array 指针。

array_shift

array_shift(array &$array)
将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。
//Note: 使用此函数后会重置(reset())array 指针。

array_unshift

array_unshift(array &$array , mixed $value1 [, mixed $… ])
将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

array_reverse

array_reverse(array $array [, bool $preserve_keys = false ])数组元素反过来
preserve_keys如果设置为 TRUE 会保留数字的键(保留键值对关系)。 非数字的键则不受这个设置的影响,总是会被保留(键值对关系总会被保存)。

in_ array

in_ array(mixed $needle , array $haystack [, bool $strict = FALSE)
判断一个元素在数组中是否存在

array_keys

array_keys(array $array [, mixed $search_value = null [, bool $strict = false ]])获取一个数组的所有下标,返回一个索引数组

  • search_value
    如果指定了这个参数,只有包含这些值的键才会返回。
  • strict
    判断在搜索的时候是否该使用严格的比较(===)(区别100和“100”)

array_values

array_values(array $array)获取一个数组的所有值,返回一个索引数组

php模拟数据结构

栈:压栈,先进去后出来(FILO)

队列:排队,先进先出(FIFO)

1…789

lh

89 posts
12 categories
© 2020 lh
Powered by Hexo v3.8.0
|
Theme – NexT.Pisces v6.7.0