IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> [PHP学习] 从零开始 一篇文章快速认识PHP的基本使用 -> 正文阅读

[PHP知识库][PHP学习] 从零开始 一篇文章快速认识PHP的基本使用

一、PHP基础

1、php 基本格式,注释,输出

  • 注释有多行注释和单行注释,多注释使用 /**/ ,单行使用 //# , 与 C++ 的一样
  • 输出使用 echo '输出内容';

在 PHP 的输出中不会自动换行,要想换行可以使用 echo '<br/>';
也可以使用 echo '<hr/>'; 输出一条分割线

  • 一般格式都是 <?php ?> ,但是最后的 ?> 可以不写,但每一行内容都需要使用分号 ; 做分隔符,否则代码会报错
<?php

# 这是一个单行注释
// 单行注释

/* 多行注释
 * 多行注释
 */

echo 'Hello world!';

2、变量和常量

2.1 变量

  1. 变量的定义:使用 ‘$’ 进行定义,如 $a;

  2. 变量的赋值:在定义变量的时候可以直接进行赋值,如 $a = 1;

  3. 变量的删除:php 中变量不使用的时候是可以进行删除的,使用 unset(变量名) 函数进行删除,如 unset($a)

  4. 变量的命名规则:
    a. 必须以 $ 符号作为开头
    b. 变量名由字母,下划线,数字组成,但开头不能是数字
    c. php 中允许使用中文变量,但不推荐使用:如 $姓名 = ‘张三’;

  5. 预定义变量:也就是提前定义的变量,是由系统定义的,用来存储许多需要用到的数据,预定义变量都是数组

$_GET : 获取所有表单以 get 方式提交的数据(‘重要’)
$_POST : post 提交的数据都会保存在此变量中(‘重要’)
$_REQUEST : get 和 post 提交的数据都会保存在此变量中(‘重要’)
$_GLOBALS : 获取 php 中所有的全局变量
$_SERVER : 获取服务器信息(‘重要’)
$_SESSION : session 会话数据(‘重要’)
$_COOKIE : cookie 会话数据(‘重要’)
$_ENV : 环境信息
$_FILES : 用户上传的文件信息

  1. 可变变量:一个变量保存的值刚好是另外一个变量的名字,那么可以直接使用这个变量访问另一个变量的值,只需要在变量名前再加上一个 $ 符号即可

如:$a = b; $b = 3; echo $$a; # 相当于输出的就是 $b, 得到的值是 3

  1. 变量传值:传值也就是给变量赋值,变量的传值有两种,一种是值传递,一种是引用传递

值传递
将变量的值直接赋给另外一个变量,两个变量之间互不影响,没有关系
$a = 1; $b = $a;

引用传递
将变量值保存的地址引用给另外一个变量,两个变量共用一个内存,也就是说此时的两个变量是一个值
引用传递需要用到 & 符号,如 $a = 1; $b = &$a; ,此时表示两个变量共用一块内存,当一个变量改变值得时候,另外一个也会随着改变

【举例】

<?php

// 定义变量:
$num1 = 3;
$num2 = 9;
$str = 'Hello';

echo $num1, '&nbsp&nbsp&nbsp', $num2, '&nbsp&nbsp&nbsp', $str;
echo '<hr/>';


// 可变变量:
$a = 1;
$b = "a";

echo $b, '&nbsp&nbsp&nbsp', $$b;
echo '<hr/>';


// 预定义变量:
echo $_GET, '&nbsp&nbsp&nbsp', $_ENV, '&nbsp&nbsp&nbsp', $_SERVER;

2.2 常量

  1. 常量的命名规则:

a. 常量的定义不需要使用 $ 符号,如果使用了就会被系统认为是变量
b. 常量的命名也是用字母,数字和下划线组成,也不能以数字开头
c. 常量的命名通常采用大写字母命名,用来和变量区分
d. 常量的命名可以使用一些特殊字符,但只能由 define 定义

  1. 常量的定义:常量的定义与变量相似,但常量必须传值,且常量的值是不能改变的

使用 define 函数定义常量:
define(常量名, 常量值, 布尔值); ,如 define('PI', 3.14)
define() 函数第三个参数值默认为 false, 作用是定义的常量是否对大小写不敏感,false 表示对大小写敏感

使用 const 定义常量:
const 常量名 = 常量值; ,如 const PI = 3.14

定义特殊字符的常量:define('-_-', 'smile')
特殊字符的输出不能直接使用 echo 输出,需要使用 constant() 函数嵌套,如 echo constant('-_-')

  1. 常用的系统常量:

PHP_VERSION : 获取 PHP 的版本号
PHP_INT_SIZE : 获取整形大小
PHP_INT_MAX : 整形能表示的最大值

  1. 常用的一些特殊常量:系统魔术常量,随着环境的改变而改变

__DIR__ : 当前被执行的脚本所在电脑的绝对路径
__FILE__ : 当亲被执行的脚本所在电脑的绝对路径(带有文件名字)
__LINE__ : 当前所属的行数
__NAMESPACE__ : 当前所属的命名空间
__CLASS__ : 当前所属的类
__METHOD__ : 当前所属的方法

【举例】

<?php

// 定义常量:
define("PI", 3.14);
define('-_-', 'smile');
const E = 2.71828;

echo PI, '&nbsp&nbsp&nbsp', E, '&nbsp&nbsp&nbsp';
echo constant('-_-');
echo '<hr/>';


// 常用的系统常量:
echo PHP_VERSION, '&nbsp&nbsp&nbsp', PHP_INT_MAX, '&nbsp&nbsp&nbsp', PHP_INT_SIZE;
echo '<hr/>';


// 魔术常量:
echo __DIR__, '<br/>', __FILE__, '<br/>', __LINE__;

3、数据类型

3.1 数据类型介绍

  1. 基本数据类型:

整形:int/integer,
系统分配4个字节储存,用来储存整数类型,但有一定的范围
浮点型:float/double
系统分配8个字节储存,储存小数或者整形存储不下的数字(超出整形范围的数据)
字符串型:string
系统根据实际长度分配,引号部分的内容
布尔类型:bool/boolean
只有 true /false 两个值

  1. 复合数据类型:

对象类型:object, 存放对象(面向对象)
数组类型:array, 一次存放多个数据

  1. 特殊数据类型:

资源类型:resource, 存放资源数据(PHP外部数据,如数据库、文件等)
空类型:NULL, 只有 NULL 一个值(不能用来运算)

3.2 类型判断、类型转换

  1. 类型判断:

使用类型判断函数判断,类型判断函数的组成是用 ‘is_’ 加上类型名称组成,如 is_int(变量名),类型判断返回的值是 bool 类型,即 true/ false

bool 类型不建议使用 echo 进行查看,可以用 ‘var_dump(变量1, 变量2…)’ 查看,var_dump(is_int($a))
var_dump() : 返回的内容由变量类型和变量的值共同组成,如返回一个整形变量的时候,结果是 int(变量值) ,但输出字符串的时候,返回的内容为 变量类型+字符个数+变量值,如 string(5)"hello"

  1. 类型转换:将数据类型转换为需要的类型,php 中有两种转换方式

自动转换:系统根据需求自己进行转换(效率比较低)
强制转换:自己根据需要对目标进行转换,只需要在变量前面加上一个括号,再写上对应的数据类型即可,如 (int)$a 表示将变量转换为 int 型,其中 NULL 类型转换需要用 unset()

  1. 在类型转换中,比较多的是转换为 bool 类型和数值类型:
  • 空字符串(""), null, 没有赋值的变量, 0, “0” 等内容转换为 bool 类型的结果为 false, 其余的多数为 true
  • bool 类型转数值: true 为 1, false 为0;
  • 字符串转数值: 以字母(字符)开头的字符串(如 “abc123”)始终为 0, 以数字开头的字符串(如 “123ab”)将数字全部提取出来,但有多个小数点的时候(如 “1.1.2a”), 提取到第二个小数点以前的数据

4、 内容补充:

gettype(变量) : 获取变量数据类型,返回的结果是变量对应的数据类型,如 整形返回 integer
settype(变量, 类型) : 设定数据类型,与强制转换有所区别

  • 强制转换:只对数据赋值的内容进行处理,不会改变原来的内容和数据类型
  • settype(): 直接改变数据的本身,数据类型和内容也随着改变

【举例】

<?php

// 定义变量:
$str1 = '1.3abc';
$str2 = '1.1.1abc';
$str3 = 'abc12';
$str4 = '_123';
$num = 11;


// 判断数据类型:
var_dump(is_int($num), is_string($num));
echo '<br/>';
var_dump($str3, $num);       // var_dump() 返回的内容由变量数据类型和变量值组成,即返回 int(123)
echo '<hr/>';


// 类型转换:

// 自动转换:
$result1 = $str1 + $num;     // 系统自动识别,转换为需要的数据类型
var_dump($result1);
echo '<br/>';      // 这里会将数据全部提取出来,所以得到的是浮点型

// 强制转换:
$result2 = (int)$str1 + $num;   // 强制转换的内容,所以得到的内容是整形
var_dump($result2);
echo '<hr/>';


// 字符串的转化规则:
echo (int)$str3, '&nbsp&nbsp', (int)$str4, '<br/>';     // 开头是字母或字符,转化结果为 0
echo (float)$str2, '<hr/>';      // 将第二个小数点前的数值提取出来


// gettype(), settype() 函数:
echo gettype($str1), '&nbsp&nbsp', gettype($num);
echo '<br/>';

var_dump($num); // 先输出变量之前的数据类型
echo ' &nbsp ';
settype($num, 'string');    // 直接改变了变量的数据类型
var_dump($num);

3.3 进制转换

1.十进制转二进制:decbin()
2.十进制转八进制:decoct()
3.十进制转十六进制:dechex()
- 将其它类型的进制转换为十进制的时候只需要将函数反过来即可,如二进制转十进制 bindec()
- 定义整形的时候:二进制前面用 0b 开头(如 ob110),八进制用 0 开头(如 0120),十六进制用 0x 开头(如 0x120)

4、 两个函数的使用介绍:
- empty() : 判断数据的值是否为“空”(空不是NULL), 如果为空返回 true, 否则返回 false
- isset() : 判断数据存储的变量本身是否存在,存在返回 true, 否则返回 false
    

【举例】

<?php

// 定义不同进制类型的整形:

$a = 12;        // 十进制
$b = 0b1010;     // 二进制
$c = 0120;      // 八进制
$c = 0x110;     // 十六进制


// 进制转换:

// 1、十进制转换为二进制
echo decbin(10), '<br/>';

// 2、十进制转换为八进制
echo decoct(10), '<br/>';

// 3、十进制转换为十六进制
echo dechex(10), '<br/>';

// 4、二进制转换为十进制
echo bindec($b), '<hr/>';


// empty(), isset() 函数的使用:
$t;
var_dump(empty($a), empty($t));     // $a 不为空,返回false, $t 为空,返回true
echo '<br/>';

var_dump(isset($t));    // 变量存在,返回true
unset($t);
var_dump(isset($t));    // 变量删除,返回false

3.4 运算符

1.算术运算符:+ - * /
2.比较运算符:> >= < <= == != === !==
- === : 表示全等于,包括数据大小和数据类型
- !== : 表示不全等于,只有大小或类型不同

3.逻辑运算符:&& || !, 分别表示 与 或 非
4.连接运算符:
- .  : 符号是一个小数点,表示将两个字符串连接在一起
- .= : 复合运算,将符号左右两边内容连接起来,然后再赋值给左边的变量
    
5.错误抑制符:@
- 在一些提前可预知的错误前加上 @ 符号,可以避免代码直接报错

6.三目运算符:表达式1 ? 表达式2 : 表达式3
- 表达式1 为条件表达式,2 和 3 为赋值表达式
- 如 $max = $a > $b ?$a : $b;

7.自操作运算符:++ --, 有前置和后置两种
- 类似的还有:+= -= *= /= %=
- 注意:使用自操作运算符时,符号右边要看成一个整体
- 如 $a -= $b - 1, 等价于 $a = $a - ($b - 1)
		

【举例】

<?php

// 运算符:

// 算术运算符:
$a = 1;
$b = 3;
echo $a + $b, '<hr/>';


// 比较运算符:
var_dump(123 == '123');     // 数据值相等,返回true
var_dump(123 === '123');    // 数据值相等,但类型不同,返回false
echo '<hr/>';


// 连接运算符:
$c = 'abc';
$d = 123;
echo $c . $d, '<br/>';
echo $c .= $d, '<hr/>';


// 错误抑制符:
echo @(123 / 0), '<hr/>';   // 除数是 0, 但此时不会报错


// 三目运算符:
$max = 3 > 0 ? 10 : 1;      // 判断条件成立,所以将表达式2赋值给变量max, 即 max = 10
echo $max, '<hr/>';

// 自操作运算符:
$e = 10;
echo $e++;

二、分支结构、循环结构

1、分支结构

1.1 if 分支

  • 基本格式如下,需注意 elseif 是连在一起写的
<?php

// if 分支:
$day = 'Monday';
if ($day == 'Sunday') {
    echo 'Today is Sunday';
} elseif ($day == 'Saturday') {
    echo 'Today is Saturday';
} else {
    echo 'Monday';
}

1.2 switch 分支

  • switch(表达式) ,表达式需要是一个具体的值或者能够获得一个具体的值,基本使用如下:
<?php

// switch 分支:
$a = 2;
switch ($a) {
    case 1:
        echo 1;
        break;
    case 2:
        echo 2;
        break;
    default:
        echo 'error';
        break;
}

2、循环结构

2.1 for 循环

  • 格式如下:

for(表达式1;表达式2;表达式3) {}

<?php

// for 循环
for($i = 1;$i <= 10;$i++){
    echo $i, ' ';
}

2.2 while, do-while 循环

<?php

// while 循环:
$i = 0;
while ($i <= 10) {
    echo $i++, ' ';
}
echo '<hr/>';


// do-while 循环:
do {
    echo $i--, ' ';
} while ($i > 0);

2.3 循环控制

  • 通过 breakcontinue 进行循环控制,使用的方式与 C++ 一致,但在 PHP 中可以使用 break 2continue 2 的方式进行多层次循环体的控制,即数字是多少就能控制多少层的循环体

三、文件包含、函数、错误类型简介

1、文件包含

  1. 文件包含的作用:实现代码的共享,相当于 C++ 中的导入头文件,Python 中导入包
  2. 文件包含的四种形式:使用的格式 include ‘文件名’;

include : 会多次包含文件,使用一次就会编译一次
include_once : 相同文件只会包含一次,当包含同一个文件多次的时候,文件也只会被编译一次
require : 与 include 作用相同
require_once : 与 include_once 作用相同

  1. include 和 require 的区别:

两者的使用方式和作用都相同,不同的是两者在导入文件出现错误时,报错的形式不一样

  • include 导入文件出错时,代码会出现警告,文件内代码能够继续运行
  • require 导入文件出错时,代码会直接报错,文件内代码不会再继续运行
  • 当文件内代码必须有导入的文件才能实现时,应该使用require , 如果导入的文件出错不会影后面的代码,可以使用include

2、函数

2.1 函数定义、参数

  1. 函数的定义使用 function 关键字定义,结构为:
function 函数名(参数){
    //代码段
}
  1. 说明:

a. 当函数需要进行传参时,如果定义的参数有默认值,则不能写在左边,只能放在右边
b. 在 PHP 中,函数对大小写不敏感,也就是小写定义的函数,大写字母也能调用
c. 在 PHP 中,不能出现同名函数,一个函数名只能对应一个函数,也就是没有函数重载

  1. 引用传递:

a. 能够通过函数直接改变外部变量的值,定义形参的时候,在形参前面加上 & 符号表示引用传递
b. 注意:引用传递必须传入变量,而不能直接传入数值,因为变量才有引用地址,直接传入数值代码会报错

  1. 函数返回值:

通过使用 return 关键字返回函数体计算的结果,返回值的数据类型可以是任意的

  1. 作用域:全局变量,局部变量,超全局变量

a. 全局变量只允许在全局空间中使用,不能在函数内部使用。同理,局部变量也只能在函数内部使用,不能在全局空间中使用

  • 超全局变量,也就是系统定义的变量(如 $_server),没有访问限制

b. 当想在函数内部使用全局变量或在全局空间中使用局部变量,此时可以使用 global 关键字定义变量,当 global 定义的变量在全局变量中存在的时候,系统会将变量内存地址指向全局空间中同名变量,如果不存在,系统就会开辟一块新的地址保存变量,本质就是实现内存地址的共用。

c. global 关键字的使用方法:

  • global 变量名; 此时不能赋值
  • 变量名 = 值; 修改变量值

d. golbal 定义局外变量(全局变量)的时候,如果在函数外部定义,则函数内部也不能直接使用变量

  1. 静态变量:

使用 static 关键字定义,static 变量名 = 变量值;
在函数内部定义静态变量只会检测一次,如 static $a = 1;, 当函数被调用的时候,这段代码只会执行一次

  1. 可变函数:
  • 效果和可变变量类似,都是一个变量保存的值是另外一个函数的名字,此时可以通过这个变量充当函数使用
  • 可变函数在系统使用过程中比较多,尤其是使用很多系统函数的时候,需要用户在外部定义一个自定义函数,然后通过变量的形式传入函数内部使用

【举例】

<?php

// 函数定义
function hello()
{
    echo 'Hello world!', '<br/>';
}

hello();


// 引用传递参数
function sum(&$num1, $num2)
{
    $num1 += $num2;
}

$a = 1;
$b = 2;
sum($a, $b);    // 不使用引用传参的话,不会改变变量值
echo $a, '<br/>';


// return 返回函数值
function plus($num1, $num2)
{
    return $num1 + $num2;
}

echo plus(2, 2), '<br/>';


// 获取全局变量
$str = "Hello";
echo $str, '&nbsp';

function get_var()
{
    global $str;    // 获取全局变量后能够更改值,但一般不会这么做,而是通过使用变量进行操作
    $str = 'World';
}

get_var();
echo $str, '<br/>';


// 静态变量
function sta()
{
    static $index = 1;
    echo $index++, ' ';  // 可以用来统计函数被调用了多少次
}
sta();
sta();
sta();
echo '<br/>';


// 可变函数
function sys_func($user_func, $num)   // 定义一个模拟的系统函数
{
    return $user_func($num);
}

function user_func($num)             // 定义一个用户自定义函数,用来返回一个数的平方
{
    return $num * $num;
}

echo sys_func('user_func', 4);      // 传入的第一个参数是用户自定义函数的名字

2.2 常用的系统函数

  1. 关于输出的函数补充:
  • print() : 类似于 echo 输出内容,本质上是一种结构,不是函数,所以可以不用括号也能输出内容(能返回 1)
  • print_r() : 类似于 var_dump(), 但是比 var_dump() 简单,不会输出数据的类型,只会输出值,一般数组打印使用较多
  1. 时间函数:

time(): 获取当前之间对应的时间戳
microtime() : 获取微秒级别的时间戳
date() : 按照指定格式输出对应的是时间戳,如果没有指定时间戳,则默认解释当前的时间戳
date('Y 年 m 月 d 日 H:i:s'): 能够输出当前时间的年月份和具体的时间,Y 表示年,m 表示月,d 表示日,H 表示24小时制的时,i 为分,s 为秒

  • date('Y 年 m 月 d 日 H:i:s', 1237823): 能够按照规定的格式输出具体的时间戳属于哪一年, 数字部分单位是秒,是从1970年开始计时的
  1. 关于数学的函数:

max() /min() : 获取指定参数中的最大值或最小值,括号里面的参数可以是多个,如 max(12, 11, 13, 45);
rand(min, max) : 获取指定闭区间范围内的一个随机数
mt_rand() : 作用和使用方法与 rand() 一样,但是效率比 rand() 高,推荐使用
round() : 四舍五入
ceil() /floor() : 向上取整 /向下取整
pow() : 求一个数的 n 次方
abs() : 求绝对值
sqrt() : 求一个数开根

  1. 有关函数的函数:

function_exists() : 判断一个函数是否存在,用来提高代码的安全性
func_get_arg() : 在自定义函数中,用来获取指定位置对应的参数,从0开始计数,第一个参数对应下标0
func_get_args() : 在自定义函数中获取所有的参数(数组)
func_num_args(): 获取当前自定义函数的参数数量

【举例】

<?php

// 输出函数补充:
print 'Hello world<br/>';        // 输出的内容可以不添加括号
echo print('');                  // 能够返回 1
echo '<br/>';
print_r('Hello world<hr/>');     // 与var_dump 一样,但不会输出数据类型


// 关于时间的函数:
echo date('Y 年 m 月 d 日 H:i:s'), '<br/>'; // 输出当前时间
echo date('Y 年 m 月 d 日 H:i:s', 2), '<br/>';       // 按照指定格式输出某一时间戳
echo time(), ' &nbsp&nbsp', microtime();
echo '<hr/>';


// 有关数学的函数:
echo max(12, 11, 13, 45), ' &nbsp', min(12, 11, 13, 45), '<br/>'; // 获取最大值和最小值
echo rand(1, 10), ' &nbsp', mt_rand(1, 10), '<br/>';  // 获取一个随机数
echo sqrt(2), '<hr/>';      // 开根号


// 有关函数的函数:
function display($a, $b)
{
    echo func_get_arg(0), '<br/>';
    echo func_get_args(), '<br/>';
    echo func_num_args();
}

display(1, 2, 3, 4);

3、错误类型简介

3.1 错误类型分类

1.语法错误(Parse error) : 
- 用户书写的代码不符合 PHP 语法规范,代码在编译的过程中不通过,代码不会执行

2.运行错误(runtime error) : 
- 代码编译通过,但在执行的过程中出现一些条件不满足导致的错误

3.逻辑错误 : 
- 写代码的时候不够规范,出现一些逻辑性错误,导致代码正常执行,但不能得到想要的结果

3.2 错误提示

  • 所有看到的错误代码在 PHP 中都被定义成系统常量,可以直接使用
1.系统错误:
E_PARSE : 编译错误,代码不会执行
E_ERROR : fatal error, 致命错误,会导致代码不能正常执行,在出错的位置断掉
E_WARNING : warning, 警告错误,不会影响代码执行,但可能得到预想不到的结果
E_NOTICE : notice, 通知错误,不会影响代码执行
    
2.用户错误: E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE
用户在使用自定义错误触发的时候,会使用到的错误代号,系统不会用到
    
3.其它错误: E_ALL
代表所有错误,通常在进行错误控制的时候使用比较多,一般在开发过程中使用

四、字符串、数组

1、字符串

1.1 字符串的定义

1、使用单引号或双引号定义,用引号适合定义一些比较短的或者没有结构要求的字符串
2、使用 nowdoc /heredoc 定义字符串:适合定义长的,有结构要求的字符串
- nowdoc  : 定义没有单引号的单引号字符串
- heredoc : 定义没有双引号的双引号字符串

3、结构化定义字符串的规则:
	a. 上边界符后面不能有任何内容,包括空格
    b. 下边界符必须顶格写,且后面只能跟分号,不能有别的内容
    c. 上下边界符名字需要相同,且下边界符不能有引号
    d. 结构化定义字符串内部(即边界符之间的内容)的所有内容都是字符串本身
    
  • nowdoc /heredoc 定义字符串的结构
// nowdoc
$str1 = <<<'边界符'
	// 字符串内容
'边界符';


// heredoc
$str2 = <<<边界符
	// 字符串内容
边界符;

【举例】

<?php

// nowdoc
$str1 = <<<'info'
		My name is kele,
  	how are you?
info;

// heredoc
$str2 = <<<info
		My name is kele,
  	how are you?
info;

var_dump($str1);
echo '<br/>';
var_dump($str2);

1.2 字符串转义和长度统计

  • 字符串的转义
1、常用的转义字符:
	\'	: 在单引号字符串中显示单引号
    \"	: 在双引号字符串中显示双引号
    \r	: 代表回车,回到当前行的首位置
    \n 	: 换行,在浏览器中不会识别 \n, 要看到换行的效果需要查看网页源码
    \t	: 相当于 tab 键
    \$	: 可以用来输出变量

2、 单引号定义的字符串内容中只能够识别 \'
	双引号定义的字符串内容中不能识别 \', 但其它转义字符都能识别
    双引号内容能识别 $ 符号,所以在双引号定义的字符串中能够解析变量内容,但单引号不能

3、 双引号中变量识别规则:
	变量本身和变量后面的内容要能够区分,保证变量的独立性,否则代码会报错,可以使用空格分开,如 $a = "ab $a cd";
    可以使用变量专业标识符区分,即给变量加上一组大括号,如 $a = "ab {$a} cd";
  • 字符串的长度统计
1、使用基本函数 strlen(), 能够得到字符串的长度,以字节为单位

2、多字节字符串长度:
包含中文长度,需要应用到 mbstring 扩展(mb: Multi Bytes)

a. 加载 mbstring 扩展:
-  找到 php.ini 配置文件,然后搜索 mbstring
-  找到 extension=php_mbstring.dll 配置文件
-  将文件名前面的分号删除然后保存文件
-  补充:没有分号表示此扩展文件是打开的,分号表示关闭

b. 加载扩展文件后需要重新启动 Apache, 然后就能使用 mb 扩展带来的函数

c. 使用 mb_strlen(字符串, 字符集) 函数统计字符串长度,还能给定字符集类型进行统计,如 mb_string($a, 'gbk')
    

2、数组

2.1 数组的定义和遍历

  • 数组定义
1、 使用 array 关键字定义:变量 = array(元素1, 元素2...);$a = array(1, 2, 3);

2、 使用中括号包裹数据:变量 = [元素1, 元素2...];$a = [1, 2, 3, 4];

3、 隐形定义数组:给变量添加一个中括号,系统将变量自动转化为数组
	如 $a[] = 1; $a[2] = 2;	下标可以不添加,系统默认从0开始,也可以手动添加,下标可以是数字和字符串等

4、 PHP 数组的特点:
	a. 下标可以是整数下标和字符串下标。整数下标用来索引数组,字符串下标用来关联数组
    b. 不同类型的下标可以混合使用(混合数组)
    c. 数组元素的顺序以放入顺序为准,和下标无关
    d. 数字下标的自增长特性:从0开始增长,但如果手动添加更大的下标,则后面的下标从最大值 +1 开始计算
       如:$a = array(1, 2); $a[10] = 10; 
       ==> 前两个对应的下标为 0, 1, 第三个开始的下标从 10 开始计数
    e. 特殊值下标自动转换: true 转为 1, false 转为 0, NULL 转为 "" (空字符)
	f. php 中数组没有长度和数据类型的限制,存储的内存在堆区
  • 多维数组的定义(二维数组)
<?php

// 同时定义值和对应的下标,使用 => 符号进行定义,多维数组嵌套和python中列表使用类似
$info = array(
    array('name' => 'Mary', 'age' => 18),
    array('name' => 'Jack', 'age' => 20)
);
  • 数组遍历(foreach 遍历)
1、 基本格式为:
	foreach(数组变量 as 下标 =>){
	    // 通过下标访问元素的值即可
    }
    
2、 使用 foreach 遍历的过程中,下标和值都是自己定义的变量,其中下标变量可以不用定义,可以直接定义变量值进行访问即可
	foreach(数组变量 as 值){
	    // 直接输出值的内容
    }

3、 两种访问方式根据需要进行选择即可,一般多维数组使用第一种方式获得每组值对应的下标,然后通过下标继续访问即可

【举例】

<?php

// 数组

// 1、定义数组
$a = array(1, 2, 3, 'hello');
$b = [1, 2, 3, 4];
$c[] = 'hello';
$c[10] = 'Mary';    // 添加值
$c[] = 12;

echo '<pre/>';      // 作用是与格式化文本,让输出内容看起来比较清晰
print_r($a);
print_r($b);
print_r($c);
echo '<hr/>';


// 2、定义多维数组
$info = array(
    array('name' => 'Mary', 'age' => 18),
    array('name' => 'Jack', 'age' => 20),
    array('name' => 'Lucy', 'age' => 19)
);

print_r($info);
echo '<hr/>';


// 3、 数组循环遍历
foreach ($info as $value) {                 // 一次循环获得一维数组值
    foreach ($value as $k => $v) {          // 二次循环获得二维数组值
        echo $k, ' : ', $v, ' &nbsp ';      // 循环一次获得一个下标对应的内容
    }
    echo '<br/>';
}
echo '<br/>';

foreach ($info as $value) {
    echo 'name : ', $value['name'], ' &nbsp ', 'age : ', $value['age'], '<br/>';
}
echo '<br/>';

2.2 数组相关函数

1、 排序函数:按照 ASCII 码进行比较排序
	sort()		: 顺序排序,原来的下标不会改变,只针对值进行排序
    rsort()		: 逆序排序
    asort()		: 顺序排序,针对值进行排序,但每个值对应的下标也会随着一起改变
    arsort()	: 逆序排序
    ksort()		: 顺序排序,针对下标的大小进行排序,每个下标对应的值也会一同改变
    krsort()	: 逆序排序
    shuffle()	: 随机打乱数组元素

2、 指针函数:也就是针对下标进行的操作
	reset()		: 重置指针,将数组指针回到首位
    end()		: 重置指针,将数组指针指到最后一元素
    next()		: 指针下移,取得下一个指针元素的值
    prev()		: 指针上移,取得上一个元素的值
    current()	: 获取当前指针对应的元素值
    key()		: 获取当前指针对应得到下标值
   【注意】next() /prev() 会移动指针,可能导致指针移动到最前或最后(此时离开数组),导致数组不能使用
   通过 next /prev 不能回到正确的指针位置,只能通过 reset() /end() 进行指针重置

【举例】

<?php

// 数组排序

echo '<pre/>';		// 格式化输出文本
$a = [6, 8, 14, 3, 2, 39, 87, 23];
print_r($a);

// sort() 排序
sort($a);
print_r($a);

// asort() 排序
asort($a);
print_r($a);

// ksort() 排序
$b = array(1 => 1, 5 => 4, 2 => 2, 3 => 12);
print_r($b);
ksort($b);
print_r($b);


// 指针函数
$c = [17, 4, 20, 9, 18, 3];
echo 'value', '   ', 'key', '<br/>';
echo current($c), '      ', key($c), '<br/>';
echo next($c), '       ', key($c), '<br/>';
echo end($c), '       ', key($c), '<br/>';
echo prev($c), '      ', key($c), '<br/>';
echo reset($c), '      ', key($c), '<br/>';

2.3 简单的算法排序

  • 冒泡排序、选择排序、插入排序、快速排序
<?php


// 冒泡排序
function bubble_sort(&$array)
{
    for ($i = 0, $len = count($array) - 1; $i < $len; $i++) {
        for ($j = 0; $j < $len - $i; $j++) {
            if ($array[$j] > $array[$j + 1]) {
                $t = $array[$j];
                $array[$j] = $array[$j + 1];
                $array[$j + 1] = $t;
            }
        }
    }
}


// 选择排序
function select_sort(&$array)
{
    for ($i = 0, $len = count($array); $i < $len; $i++) {
        $min = $i;  // 记录最小下标
        for ($j = $i + 1; $j < $len; $j++) {
            if ($array[$min] > $array[$j]) {
                $min = $j;
            }
        }
        // 交换下标对应的值
        if ($min != $i) {
            $t = $array[$i];
            $array[$i] = $array[$min];
            $array[$min] = $t;
        }
    }
}


// 插入排序
function insert_sort(&$array)
{
    $len = count($array) - 1;
    for ($i = 1; $i < $len; $i++) {
        $t = $array[$i];
        $flag = false;
        for ($j = $i - 1; $j >= 0; $j--) {
            if ($array[$j] > $t) {
                $array[$j + 1] = $array[$j];    // 将大的数据和小的交换位置
                $flag = true;   // 标志存在顺序不对的下标
            } else {
                break;
            }
        }
        // 将数值比较小的数据插入到对应的位置
        if ($flag) {
            $array[$j + 1] = $t;
        }
    }
}


// 快速排序:使用的是递归思想
function quick_sort($array)
{
    $len = count($array);
    if ($len <= 1)              // 只有一个元素,直接返回
        return $array;

    $min = $max = array();      // 定义两个数组,用来储存比较大的元素和小的元素
    for ($i = 1; $i < $len; $i++) {
        // 一般以第一个元素最为参照,大于第一个元素的值放入 max 数组中,小于的放入 min 数组中
        if ($array[$i] < $array[0]) {
            $min[] =  $array[$i];
        } else {
            $max[] = $array[$i];
        }
    }

    // 使用递归不断分配排序元素
    $min = quick_sort($min);
    $max = quick_sort($max);

    // 合并数组,array_merge() 的作用是合并数组元素,传入函数的参数只能是数组
    return array_merge($min, (array)$array[0], $max);   
}


$a = [4, 7, 2, 9, 1, 0, 3, 23, 11];
echo '<pre/>';
print_r($a);
echo '<hr/>';

// bubble_sort($a);
// select_sort($a);
// insert_sort($a);
// print_r($a);
// $k = quick_sort($a);
// print_r($k);
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:17:59  更:2022-03-24 00:18:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:56:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码