1.读写文本文件
在 PHP 中,提供了一系列的系统函数,用于读写文本文件的内容。
PHP 读写文本文件常用函数:
| 函数名 | 说明 |
|---|---|
| fopen() | 打开文件 |
| fclose() | 关闭文件 |
| fgets() | 读取一行字符 |
| fgetss() | 读取一行字符,并过滤掉HTML和PHP标记 |
| fgetc() | 读取一个字符 |
| fputs() | 写入文件内容 |
| fwrite() | 写入文件内容 |
| file_get_contents() | 将整个文件读入一个字符串 |
| file_put_contents() | 将一个字符串写入文件 |
在 PHP 中,通过 fopen() 函数打开文件时,必须要指定打开文件的访问权限。
PHP 打开文件访问权限:
| 访问权限 | 说明 |
|---|---|
| r | 以只读方式打开文件 |
| r+ | 以读写方式打开文件 |
| w | 以写入方式打开文件 注:如果该文件不存在,则创建文件;如果该文件存在,则替换现有文件 |
| w+ | 以读写方式打开文件 注:如果该文件不存在,则创建文件;如果该文件存在,则替换现有文件 |
| a | 以写入方式打开文件,并向文件末尾追加内容 注:如果该文件不存在,则创建文件 |
| a+ | 以读写方式打开文件,并向文件末尾追加内容 注:如果该文件不存在,则创建文件 |
| x | 创建并以写入方式打开文件 |
| x+ | 创建并以读写方式打开文件 |
写入文件步骤:
1、打开文件
2、向文件中写入内容
3、关闭文件
示例
<?phpheader("content-type:text/html;charset=utf-8");$handle=fopen("doc.txt","w");fputs($handle,"你好中国");fclose($handle);
读取文件步骤:
1、打开文件
2、读取文件中的内容
3、关闭文件
示例
<?phpheader("content-type:text/html;charset=utf-8");$handle=fopen("doc.txt","r");$str=fgets($handle);fclose($handle);echo$str;
2.索引数组
数组是一组数据的集合,这组数据按照一定的规则组织起来,形成一个可操作的整体。
PHP数组分类(根据数组下标不同):
索引数组
关联数组
索引数组:数组的下标是由整数数字组成,默认从 0 开始,向后每次加 1。
定义索引数组语法格式:
1、定义一个空数组
$数组名 = array();
2、定义数组并赋值
$数组名 = array( 值 , 值 , 值 … );
示例
<?phpheader("content-type:text/html;charset=utf-8");$arr=array("北京",100,"上海","天津");print_r($arr);
代码讲解
1、定义数组并赋值
$arr = array(“北京”,100,”上海”,”天津”);
定义索引数组,并将 “北京”、100、”上海”、”天津” 这四个值存储到数组中。
$arr:是数组的名称。
在 PHP 中,通过数组名称及数组下标,可实现对数组中所有值的操作。
索引数组取值语法格式:
$数组名称[下标];
示例
<?phpheader("content-type:text/html;charset=utf-8");$arr=array("北京",100,"上海","天津");echo"数组中第1个值:{$arr[0]}<br/>";echo"数组中第3个值:{$arr[2]}<br/>";
代码讲解
1、数组取值
echo “数组中第1个值:{$arr[0]}
“;
echo “数组中第3个值:{$arr[2]}
“;
取出 $arr 数组中的值,并输出。
$arr:是数组名称。
$arr[0]:代表 $arr 数组中第 1 个值,而数组中第 1 个值的下标为 0。
$arr[2]:代表 $arr 数组中第 3 个值,而数组中第 3 个值的下标为 2。
索引数组存值语法格式:
1、将值存储到数组指定下标位置
$数组名[下标] = 值;
2、向数组末尾追加值
$数组名[] = 值;
示例
<?phpheader("content-type:text/html;charset=utf-8");$arr=array("北京",100,"上海","天津");$arr[5]="西安";$arr[1]="深圳";$arr[]="南京";print_r($arr);
代码讲解
1、将值存储到数组指定下标位置
$arr[5] = “西安”;
将 “西安” 存储到 $arr 数组中 5 下标对应的位置。
2、修改数组中原有值
$arr[1] = “深圳”;
将 “深圳” 存储到 $arr 数组中 1 下标对应的位置。
注:因为 $arr 数组 1 下标原本就有值,所以此句代码,相当于将 1 下标原有值修改为 “深圳”。
3、向数组末尾追加值
$arr[] = “南京”;
将 “南京” 添加到 $arr 数组的末尾位置。
在 PHP 中,通过 count() 函数可以获得数组长度。数组长度,是指数组中存储的值的个数。
获得数组长度语法格式:
count($数组名称);
示例
<?phpheader("content-type:text/html;charset=utf-8");$arr=array("北京",100,"上海","天津");$len=count($arr);echo"数组长度为:{$len}";
代码讲解
1、获得数组长度
$len = count($arr);
通过 count() 函数,获得 $arr 数组长度,也就是 $arr 数组中值的个数。
3.关联数组
关联数组:数组的下标是由字符串组成,当然,字符串可以包含数字。
在一个数组中,只要有一个值的下标不是数字,这个数组就是关联数组。
定义关联数组语法格式:
1、定义一个空数组
$数组名 = array();
2、定义数组并赋值
$数组名 = array( 下标=>值 , 下标=>值 , 下标=>值 … );
示例
<?phpheader("content-type:text/html;charset=utf-8");$arr=array("userName"=>"张小明","sex"=>"男","age"=>10);print_r($arr);
代码讲解
1、定义数组并赋值
$arr = array(“userName”=>”张小明”,”sex”=>”男”,”age”=>10);
定义关联数组,并向数组中存储三个值。
在 PHP 中,关联数组的操作与索引数组几乎完成相同,只不过数组的下标有所区别。
示例
<?phpheader("content-type:text/html;charset=utf-8");$arr=array("userName"=>"张小明","sex"=>"男","age"=>10);$arr["address"]="北京";$arr["age"]=17;$len=count($arr);echo"姓名:{$arr["userName"]}<br/><br/>";echo"数组长度为:{$len}<br/><br/>";print_r($arr);
代码讲解
1、向数组中添加一个新值
$arr[“address”] = “北京”;
将 “北京” 存储到 $arr 数组中,对应的数组下标为 “address”。
2、修改数组中原有值
$arr[“age”] = 17;
将 $arr 数组中 “age” 下标对应的值,修改为 17。
3、获得数组长度
$len = count($arr);
通过 count() 函数,获得 $arr 数组长度。
4、数组取值
echo “姓名:{$arr[“userName”]}
“;
获得 $arr 数组中 “userName” 下标对应的值,并输出。
4.多维数组
在 PHP 中,一个数组中的值可以是另一个数组,另一个数组中的值也可以是一个数组,也就是说数组可以嵌套。
一维数组:没有发生嵌套的普通数组。
二维数组:两层数组的嵌套。
三维数组:三层数组的嵌套。
多维数组:多层数组的嵌套。
示例
<?php
header("content-type:text/html;charset=utf-8");
$arr=array(
array("id"=>1,"userName"=>"张三","sex"=>"男","age"=>15),
array("id"=>2,"userName"=>"李四","sex"=>"女","age"=>14),
array("id"=>3,"userName"=>"王五","sex"=>"女","age"=>16),
array("id"=>4,"userName"=>"赵六","sex"=>"男","age"=>15),
array("id"=>5,"userName"=>"田七","sex"=>"女","age"=>16)
);
echo"第5名学生的姓名为:{$arr[4]["userName"]}<br/><br/>";
echo"<pre>";
print_r($arr);
echo"</pre>";
代码讲解
1、定义二维数组
$arr = array(
array(“id”=>1,”userName”=>”张三”,”sex”=>”男”,”age”=>15),
array(“id”=>2,”userName”=>”李四”,”sex”=>”女”,”age”=>14),
array(“id”=>3,”userName”=>”王五”,”sex”=>”女”,”age”=>16),
array(“id”=>4,”userName”=>”赵六”,”sex”=>”男”,”age”=>15),
array(“id”=>5,”userName”=>”田七”,”sex”=>”女”,”age”=>16)
);
$arr 数组中的每个值都是一个数组,也就是两层数组的嵌套,所以 $arr 是一个二维数组。
2、二维数组取值
echo “第5名学生的姓名为:{$arr[4][“userName”]}
“;
获得 $arr 数组中值,并输出。
$arr[4]:代表 $arr 数组中的第 5 个值,也就是 4 下标对应的关联数组。
$arr[4][“userName”]:代表 $arr 数组中 4 下标对应的关联数组中的 “userName” 下标对应的值。
5.字符串函数
在 PHP 中,提供了一系列的系统函数,用于实现字符串的相关操作。
PHP 常用字符串函数:
| 函数名 | 说明 |
|---|---|
| chr() | 从指定ASCII值返回字符 |
| explode() | 分割字符串 |
| ltrim() | 移除字符串左侧的空白字符或其他字符 |
| md5() | 使用MD5算法对字符串进行加密 |
| nl2br() | 将字符串中的\n转换为 |
| ord() | 返回字符串中第一个字符的ASCII值 |
| rtrim() | 移除字符串右侧的空白字符或其他字符 |
| strlen() | 返回字符串长度 |
| str_replace() | 替换字符串中的一些字符(大小写敏感) |
| strpos() | 返回字符串在另一字符串中第一次出现的位置(大小写敏感) |
| strrpos() | 返回字符串在另一字符串中最后一次出现的位置(大小写敏感) |
| strtolower() | 把字符串转换为小写字母 |
| strtoupper() | 把字符串转换为大写字母 |
| substr() | 截取字符串 |
| trim() | 移除字符串两侧的空白字符或其他字符 |
示例
<?php
header("content-type:text/html;charset=utf-8");
$a=trim("==中国==","=");
echo"移除字符串两侧的其他字符:{$a}<br/><br/>";
$a=explode("-","北京-上海-深圳");
echo"分割字符串:";
print_r($a);
echo"<br/><br/>";
$a=strlen("你好中国");
echo"字符串长度:{$a}<br/><br/>";
$a=md5("张三");
echo"md5加密:{$a}<br/><br/>";
$a=str_replace("Hello","你好","Hello,北京");
echo"字符串替换:{$a}<br/><br/>";
$a=strtolower("HelloWorld");
echo"转为小写字母:{$a}<br/><br/>";
$a=strtoupper("HelloWorld");
echo"转为大写字母:{$a}<br/><br/>";
$a=substr("HelloWorld",5,5);
echo"字符串截取:{$a}<br/><br/>";
代码讲解
1、移除字符串两侧的空白字符或其他字符
$a = trim(“==中国==”,”=”);
移除字符串 “==中国==” 两侧的 “=” 字符。
2、分割字符串
$a = explode(“-“,”北京-上海-深圳”);
将字符串 “北京-上海-深圳” 按字符串 “-“ 进行分割,并返回数组。
3、获取字符串长度
$a = strlen(“你好中国”);
获取字符串 “你好中国” 的长度。
4、MD5加密
$a = md5(“张三”);
通过 MD5 算法,对字符串 “张三” 进行加密。
5、替换字符串
$a = str_replace(“Hello”, “你好”, “Hello,北京”);
将字符串 “Hello,北京” 中的 “Hello” 字符串,替换为 “你好”。
6、将字符串转换为小写字母
$a = strtolower(“HelloWorld”);
将字符串 “HelloWorld” 转换为小写字母。
7、将字符串转换为大写字母
$a = strtoupper(“HelloWorld”);
将字符串 “HelloWorld” 转换为大写字母。
8、截取字符串
$a = substr(“HelloWorld”, 5,5);
在字符串 “HelloWorld” 中,从 5 下标开始,向右截取 5 个字符。
6.补充:
文件读写操作
1 .文件操作
在 PHP 中,提供了一系列的系统函数,用于读写文本文件的内容。
- 文件打开 fopen()
fopen(
string $filename,
string $mode,
bool $use_include_path = false,
resource $context = ?
): resource
fopen() 将 filename 指定的名字资源绑定到一个流上,打开文件或者 URL。
- 参数一 filename
要打开的文件名,以字符串方式指定 ,可以是绝对路径 ,也可以是相对路径 . 参数二 mode
mode参数指定了所要求到该流的访问类型。可以是以下值:
|mode| 说明 | | —- | —- | |'r'| 只读方式打开,将文件指针指向文件头。read | |'r+'| 读写方式打开,将文件指针指向文件头。 read+ | |'w'| 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。write | |'w+'| 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 | |'a'| 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 Append | |'a+'| 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |示例:
$file = fopen('test.txt', "r");
- 文件关闭 fclose()
fclose(resource $handle): bool
关闭一个已打开的文件指针,成功时返回 **true**, 或者在失败时返回 **false**。
在文件操作中,关闭文件操作虽然看不到明显的效果,但是一定要关闭,否则可能会产生内存泄露.
fcolse($file);
- 读取一个字符 fgetc()
从文件句柄中获取一个字符,也就是读取一个字节。
返回一个包含有一个字符的字符串,该字符从 handle 指向的文件中得到。 碰到 EOF 则返回 **false**。
fgetc(resource $handle): string
$file = fopen("test.txt", "w+");
// 如果是英文,一次读取一个字符
// 如果是中文 ,UTF8 编码,需要读取三次才能拼接成一个汉字, GBK 需要读取两次
// 注意,中文时,每次都要读取完马上输出,可以拼接成汉字后,即会显示
$content = fgetc($file); //get_file_character
echo $content;
$content = fgetc($file);
echo $content;
$content = fgetc($file);
echo $content;
- 练习: 读取文件中所有内容
<?php $file = fopen("test.txt", "r"); do{ $content = fgetc($file); echo $content; // 判断读取的内容是不是空字符串,如果是空串,表示已经读取到文件最后 // }while($content != ""); }while($content); fclose($file); ?>
- 文件结束判断 feof()
feof(resource $handle): bool
feof — 测试文件指针是否到了文件结束的位置
如果文件指针到了 EOF 或者出错时则返回 **true**,否则返回一个错误(包括 socket 超时),其它情况则返回 **false**。
上面的练习可以改为:
<?php
$file = fopen("test.txt", "r");
do{
$content = fgetc($file);
echo $content;
// 判断 文件 是否结束,如果结束就跳出循环,否则继续读取
}while(!feof($file));
fclose($file);
?>
- 读取一行内容 fgets()
fgets(resource $handle, int $length = ?): string
fgets — 从文件指针中读取一行
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。
碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。
如果没有指定 length,则默认为 1K,或者说 1024 字节。
<?php
$file = fopen("test.txt", "r");
do{
// 一次读取一行,默认是 1024字节
$content = fgets($file);
// 指定读取 字节数
// $content = fgets($file,5);
echo $content . "<br>";
}while(!feof($file));
fclose($file);
?>
- 读取一行内容,并过滤 HTML 标记 fgetss()
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string
fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
allowable_tags可以用可选的第三个参数指定哪些标记不被去掉。
<?php
$file = fopen("https://www.baidu.com", "r");
do{
// 一次读取一行,默认是 1024字节
$content = fgetss($file);
echo $content . "<br>";
}while(!feof($file));
fclose($file);
?>
- 读取指定大小内容 fread()
fread(resource $handle, int $length): string
fread — 读取文件(可安全用于二进制文件)
fread() 从文件指针 handle 读取最多 length 个字节。 该函数在遇上以下几种情况时停止读取文件:
- 读取了
length个字节 - 到达了文件末尾(EOF)
<?php
$file = fopen("test.txt", "r");
do{
// 一次读取文件中的10个字节
$content = fread($file, 10);
echo $content . "<br>";
}while(!feof($file));
fclose($file);
?>
- 获取文件大小 filesize()
filesize(string $filename): int
filesize — 取得文件大小,返回文件大小的字节数
注意一: 参数是测试文件的路径
注意二: 因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果。
<?php
// test.txt: 1024 bytes
$filename = 'test.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
?>
<?php
$file = fopen("test.txt", "r");
// 获取文件大小,一次性读取出来
$content = fread($file, filesize("test.txt"));
echo $content;
fclose($file);
?>
- 将整个文件读取出为一个字符串 file_get_contents()
file_get_contents(
string $filename,
bool $use_include_path = false,
resource $context = ?,
int $offset = 0,
int $length = ?
): string|false
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。
如果操作系统支持还会使用内存映射技术来增强性能。
<?php
$content = file_get_contents("test.txt");
echo $content;
?>
- 将整个文件读取出并保存为一个数组 file()
file(string $filename, int $flags = 0, resource $context = ?): array
返回数组形式的文件内容。数组的每个元素对应于文件中的一行(结尾会附加换行符)。 失败时,file() 返回 **false**。
<?php
$content = file("test.txt");
var_dump($content);
?>
- 向文件写入一个字符串 fwrite()
fwrite(resource $handle, string $string, int $length = ?): int
fwrite() 把 string 的内容写入 文件指针 handle 处。
注意一: 文件必须以写入或读写方式打开才可以进行写入操作
注意二: 在写入时,文件被创建所在的目录,也必须要有写入的权限才可以.否则不能创建文件
<?php
$file = fopen("1.txt", 'w');
fwrite($file, "hello\n");
fwrite($file, "world");
fclose($file);
?>
- fpus()
fputs(resource $handle, string $string, int $length = ?): int
此函数是该函数的别名:fwrite()。
<?php
$file = fopen("2.txt", 'w');
// 使用 fputs 写入
fputs($file, "hello\n");
// 使用 fwrite 写入
fwrite($file, "world");
fclose($file);
?>
- file_put_contents()
file_put_contents(
string $filename,
mixed $data,
int $flags = 0,
resource $context = ?
): int
和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
参数 data 可以是数组(但不能为多维数组).
<?php
$animals = ["chicken", "duck", "goose",'dog','pig'];
file_put_contents('1.txt', $animals);
?>
7.老师补充:
7.1.数组介绍
数组是一组数据的集合,这组数据按照一定的规则组织起来,形成一个可操作的整体。
PHP 中的 array 实际上是一个有序映射。
映射是一种把 values 关联到 keys 的类型。
此类型针对多种不同用途进行了优化; 它可以被视为数组、列表(向量)、哈希表hash table(映射的实现)、字典、集合、堆栈、队列等等。
由于 array 的值可以是其它 array 所以树形结构和多维 array 也是允许的。
7.2 PHP数组分类
根据数组下标不同,PHP中的数组可以分为两类
- 索引数组
- 关联数组
索引数组就是传统的数组定义方式 . 通过下标的方式保存和操作数组中的元素.
关联数组更像是其它语言中的字典,或对象, 使用键值对的方式保存和操作数组中的元素.
以下笔记 中,都按对比的方式 , 讲解两种数组的操作.
7.3 数组的定义
定义空数组
在定义空数组时,不会区分数组是索引数组还是关联数据,完全看后期的使用方式
<?php
header("content-type:text/html;charset=utf-8");
// 定义空数组
$arr1 = array();
echo gettype($arr1);
echo "<br>";
$arr2 = [];
echo gettype($arr2);
echo "<br>";
?>
定义带元素的数组
索引数组
<?php
// 定义带元素的数组
$arr3 = array(1,2,3,4);
var_dump($arr3);
echo "<br>";
// 由于PHP是弱类型语言,数组中的元素可以是任意类型
$arr4 = ["cat", "dog","pig"];
var_dump($arr4);
echo "<br>";
?>
关联数组
key 可以是 integer 或者 string。value 可以是任意类型。
<?php
header("content-type:text/html;charset=utf-8");
//
// 定义带元素的数组
$arr1 = array( "Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日");
var_dump($arr1);
echo "<br>";
// 由于PHP是弱类型语言,数组中的元素可以是任意类型
$arr2 = ["Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日"];
var_dump($arr2);
echo "<br>";
// 定义
7.4向数组中添加元素
索引数组
<?php
header("content-type:text/html;charset=utf-8");
//
$arr1 = array();
var_dump($arr1);
echo "<br>";
// 指定下标方式添加数据
$arr1[0] = 111;
var_dump($arr1);
echo "<br>";
$arr1[1] = 222;
var_dump($arr1);
echo "<br>";
// 不指定下标,追加到最后
$arr1[] = 333;
var_dump($arr1);
echo "<br>";
$arr1[5] = 555;
var_dump($arr1);
echo "<br>";
// 这个元素的下标是多少?
$arr1[] = 666;
var_dump($arr1);
echo "<br>";
?>
关联数组
<?php
header("content-type:text/html;charset=utf-8");
// 由于PHP是弱类型语言,数组中的元素可以是任意类型
$arr2 = [];
var_dump($arr2);
echo "<br>";
$arr2["one"] = 111;
var_dump($arr2);
echo "<br>";
$arr2["two"] = 222;
var_dump($arr2);
echo "<br>";
// 关联数组中允许使用混合key, 但是只能是int 或string
// 如果不写key, 默认从 0 开始存放,如果前面有数字key,则接续保存
$arr2[] = 333;
var_dump($arr2);
echo "<br>";
$arr2[] = 444;
var_dump($arr2);
echo "<br>";
?>
7.5 获取数组中元素个数
```php
count(Countable|array $value, int $mode = COUNT_NORMAL): int
统计出数组里的所有元素的数量
<?php
header("content-type:text/html;charset=utf-8");
$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
echo count($arr1);
echo "<br>";
// 由于PHP是弱类型语言,数组中的元素可以是任意类型
$arr2 = ["Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日"];
echo count($arr2);
?>
7.6. 获取数组中的元素
对数组进行取值时,不区分数组类型
```php
数组名[索引/下标];
<?php
header("content-type:text/html;charset=utf-8");
$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
echo $arr1[0];
echo "<br>";
echo $arr1[5];
echo "<br>";
// 索引数组在访问下标越界时,会报错
// echo $arr1[10];
// echo "<br>";
// 由于PHP是弱类型语言,数组中的元素可以是任意类型
$arr2 = ["Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日"];
echo $arr2["Monday"];
echo "<br>";
echo $arr2["Saturday"];
echo "<br>";
// 关联数组在使用一个未定义的key取值时会报错
// echo $arr2["xxx"];
// echo "<br>";
?>
7.7. 修改数组中的元素值
```php
数组名[索引/下标] = 值;
修改数据和添加数组类似,如果指定 的索引或 key 不存在,就是添加, 存在就是修改.
<?php
header("content-type:text/html;charset=utf-8");
$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
var_dump($arr1);
echo "<br>";
$arr1[0] = "星期一";
var_dump($arr1);
echo "<br>";
$arr1[0] = "周一";
var_dump($arr1);
echo "<br>";
$arr2 = ["Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日"];
var_dump($arr2);
echo "<br>";
$arr2["Monday"] = "星期一";
var_dump($arr2);
echo "<br>";
$arr2["Monday"] = "周一";
var_dump($arr2);
echo "<br>";
?>
7.8. 删除数组/数组中的元素
在php中, 可以使用 unset() 函数来删除数组或数组中元素的值.
<?php
header("content-type:text/html;charset=utf-8");
$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
var_dump($arr1);
echo "<br>";
unset($arr1[0]);
var_dump($arr1);
echo "<br>";
// 删除之后再使用会报错
unset($arr1);
var_dump($arr1);
echo "<br>";
$arr2 = ["Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日"];
var_dump($arr2);
echo "<br>";
unset($arr2["Monday"]);
var_dump($arr2);
echo "<br>";
// 删除之后再使用会报错
unset($arr2);
var_dump($arr2);
echo "<br>";
?>
7.9. 遍历数组
foreach 语法结构提供了遍历数组的简单方式。
```php
foreach (iterable_expression as $value)
statement
foreach (iterable_expression as $key => $value)
statement
第一种格式遍历给定的 iterable_expression 迭代器。每次循环中,当前单元的值被赋给 $value。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
<?php
header("content-type:text/html;charset=utf-8");
$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
// 不带下标遍历
foreach ($arr1 as $val) {
echo "值:" . $val . "<br>";
}
// 带下标遍历
foreach ($arr1 as $i => $val) {
echo "下标:" . $i . "-> 值:" . $val . "<br>";
}
echo "<hr>";
$arr2 = ["Monday"=>"星期一",
"Tuesday"=>"星期二",
"Wednesday"=>"星期三",
"Thursday"=>"星期四",
"Friday"=>"星期五",
"Saturday"=>"星期六",
"Sunday"=>"星期日"];
// 不带下标遍历
foreach ($arr2 as $val) {
echo "值:" . $val . "<br>";
}
// 带下标遍历
foreach ($arr2 as $key => $val) {
echo "key:" . $key . "-> value:" . $val . "<br>";
}
?>
710. 多维数组
在 PHP 中,一个数组中的值可以是另一个数组,另一个数组中的值也可以是一个数组,也就是说数组可以嵌套。
一维数组:没有发生嵌套的普通数组。
二维数组:两层数组的嵌套。
三维数组:三层数组的嵌套。
多维数组:多层数组的嵌套。
```php
- 定义二维数组
```php
$arr = array(
array("id"=>1,"userName"=>"张三","sex"=>"男","age"=>15),
array("id"=>2,"userName"=>"李四","sex"=>"女","age"=>14),
array("id"=>3,"userName"=>"王五","sex"=>"女","age"=>16),
array("id"=>4,"userName"=>"赵六","sex"=>"男","age"=>15),
array("id"=>5,"userName"=>"田七","sex"=>"女","age"=>16)
);
二维数组取值
echo $arr[0][id]; echo $arr[3]["username"];8.PHP&HTML混写php 99乘法表的显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<table>
<?php
for ($i=1; $i <=9; $i++) { ?>
<tr>
<?php
for ($j=1; $j <= $i ; $j++) {
$ret = $i * $j;
?>
<td style="border: 1px solid blue">
<?php echo "$j * $i = $ret" ?>
</td>
<?php } ?>
<?php } ?>
</table>
</body>
</html>
```php
-- 数组展示
```php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$stus = [
["name"=>"Tom", "age"=>24, "gender"=>"male", "address"=>"Beijing"],
["name"=>"Jack", "age"=>26, "gender"=>"male", "address"=>"Beijing"],
["name"=>"Rose", "age"=>42, "gender"=>"male", "address"=>"Beijing"],
["name"=>"Tony", "age"=>21, "gender"=>"male", "address"=>"Beijing"],
];
?>
<table>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>地址</th>
</tr>
<?php foreach($stus as $stu){ ?>
<tr>
<?php
foreach($stu as $val){ ?>
<td>
<?php echo $val; ?>
</td>
<?php } ?>
</tr>
<?php } ?>
</table>
</body>
</html>
10. 字符串操作<br />一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。如果是汉字,根据编码计算所占字节数.<br />11.定符串定义
```php
- 单引号形式
// 不转义,所见即所得 $s1 = ‘hello’;
$s2 = ‘hello $s1 \n’;
- 双引号形式
```php
// 转义变量或转义特殊字符
$s1 = "hello";
$s2 = "hello $s1 \n";
12.获取字符串长度函数
strlen() -返回给定的字符串 `string` 的长度。
```php
strlen(string $string): int
<?php
header("content-type:text/html;charset=utf8");
$s1 = "helloworld";
echo strlen($s1);
echo "<br>";
$s2 = "你好";
echo strlen($s2);
echo "<br>";
?>
13.查找相关
```php
- strpos() — 查找字符串首次出现的位置
```php
strpos(string $haystack, mixed $needle, int $offset = 0): int
<?php
header("content-type:text/html;charset=utf8");
// 可查找单个字符
$s1 = "helloworld";
echo strpos($s1,"o");
echo "<br>";
// 可查多个字符
$s2 = "哈喽你好你好";
echo strpos($s2, "你");
echo "<br>";
echo strpos($s2, "你好");
echo "<br>";
?>
strrpos() — 计算指定字符串在目标字符串中最后一次出现的位置, 反向查找;
strrpos(string $haystack, string $needle, int $offset = 0): int<?php header("content-type:text/html;charset=utf8"); // 可查找单个字符 $s1 = "helloworld"; echo strrpos($s1,"o"); echo "<br>"; // 可查多个字符 $s2 = "哈喽你好你好"; echo strrpos($s2, "你"); echo "<br>"; echo strrpos($s2, "你好"); echo "<br>"; ?>stripos() — 查找字符串首次出现的位置(不区分大小写)
stripos(string $haystack, string $needle, int $offset = 0): int<?php header("content-type:text/html;charset=utf8"); // 可查找单个字符 $s1 = "heLloworld"; echo stripos($s1,"l"); echo "<br>"; ?>strripos() — 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
strripos(string $haystack, string $needle, int $offset = 0): int<?php header("content-type:text/html;charset=utf8"); // 可查找单个字符 $s1 = "heLloworld"; echo strripos($s1,"l"); echo "<br>"; ?>14.统计相关phpstr_word_count — 返回字符串中单词的使用情况
str_word_count(string $string, int $format = 0, ?string $characters = null): array|intformat参数:
指定函数的返回值。当前支持的值如下:
- 0 - 返回单词数量(默认)
- 1 - 返回一个包含
string中全部单词的数组 - 2 - 返回关联数组。数组的键是单词在
string中出现的数值位置索引下标,数组的值是这个单词
注意:请注意,不支持多字节编码的字符串(不支持汉字统计)。
<?php header("content-type:text/html;charset=utf8"); $str = "Hello fri3nd, you're looking good today!"; echo str_word_count($str); echo "<br>"; print_r(str_word_count($str, 0)); echo "<br>"; print_r(str_word_count($str, 1)); echo "<br>"; print_r(str_word_count($str, 2)); ?>substr_count — 计算字串出现的次数
substr_count( string $haystack, string $needle, int $offset = 0, ?int $length = null ): int```php <?php header(“content-type:text/html;charset=utf8”); $text = ‘This is a test’;
// 查找全部字符串内容 echo substr_count($text, ‘is’); // 2
// 字符串被简化为 ‘s is a test’,因此输出 1 echo substr_count($text, ‘is’, 3);
// 字符串被简化为 ‘s i’,所以输出 0 echo substr_count($text, ‘is’, 3, 3);
// 因为 5+10 > 14,所以生成警告 // echo substr_count($text, ‘is’, 5, 10);
// 输出 1,因为该函数不计算重叠字符串
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
?>
15.比较相关
- [strcmp](https://www.php.net/manual/zh/function.strcmp.php) — 二进制安全字符串比较
如果 `str1` 小于 `str2` 返回 < 0; 如果 `str1` 大于 `str2` 返回 > 0;如果两者相等,返回 0。(返回值为两串相减的差值)
```php
strcmp(string $str1, string $str2): int
<?php
header("content-type:text/html;charset=utf8");
echo strcmp("a", "b");
echo "<br>";
echo strcmp("a", "a");
echo "<br>";
echo strcmp("b", "a");
echo "<br>";
echo strcmp("abc", "z");
echo "<br>";
?>
strcasecmp — 二进制安全比较字符串(不区分大小写)
如果
str1小于str2返回 < 0; 如果str1大于str2返回 > 0;如果两者相等,返回 0。strcasecmp(string $str1, string $str2): int<?php header("content-type:text/html;charset=utf8"); echo strcasecmp("a", "b"); echo "<br>"; echo strcasecmp("a", "a"); echo "<br>"; echo strcasecmp("b", "a"); echo "<br>"; echo strcasecmp("abc", "z"); echo "<br>"; echo strcasecmp("A", "a"); echo "<br>"; echo strcasecmp("ab", "Z"); echo "<br>"; ?>
strncmp — 二进制安全比较字符串开头的若干个字符
该函数与 strcmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度(即最大比较长度)。
注意该比较区分大小写。
strncmp(string $str1, string $str2, int $len): int<?php header("content-type:text/html;charset=utf8"); echo strncmp("abcc", "abcd", 3); echo "<br>"; ?>16.替换相关phpstr_replace — 子字符串替换
str_replace( mixed $search, mixed $replace, mixed $subject, int &$count = ? ): mixed<?php header("content-type:text/html;charset=utf8"); // 替换不会改变原字符串,会生成一个新字符串 $old = "aa"; $new = "AA"; $str = "aaBBaaBBaaBB"; $newStr = str_replace($old, $new, $str); echo $str; echo "<br>"; echo $newStr; echo "<br>"; // 查找值可以是字符串,也可以是数组 // 将字符串中所有出现的元音使用空串替换掉 // 赋值: Hll Wrld f PHP $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace($vowels, "", "Hello World of PHP"); echo $onlyconsonants; echo "<br>"; // 当查找值和替换值都使用数组,则值会一一对应替换, // 赋值: You should eat pizza, beer, and ice cream every day $phrase = "You should eat fruits, vegetables, and fiber every day."; $healthy = array("fruits", "vegetables", "fiber"); $yummy = array("pizza", "beer", "ice cream"); $newphrase = str_replace($healthy, $yummy, $phrase); echo $newphrase; echo "<br>"; // 赋值: 2 $str = str_replace("ll", "", "good golly miss molly!", $count); echo $count; echo "<br>"; echo $str; ?>
str_ireplace — str_replace 的忽略大小写版本
str_ireplace( mixed $search, mixed $replace, mixed $subject, int &$count = ? ): mixed<?php header("content-type:text/html;charset=utf8"); // 替换不会改变原字符串,会生成一个新字符串 $old = "aa"; $new = "--"; $str = "aaBBAABBaaBBAABB"; $newStr = str_ireplace($old, $new, $str); echo $str; echo "<br>"; echo $newStr; echo "<br>"; ?>
str_repeat — 重复一个字符串
str_repeat(string $input, int $multiplier): string<?php header("content-type:text/html;charset=utf8"); echo str_repeat("Hello", 5); echo "<br>"; ?>substr_replace — 替换字符串的子串(根据指定的位置 进行替换)
substr_replace() 在字符串
string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。substr_replace( mixed $string, mixed $replacement, mixed $start, mixed $length = ? ): mixed$var = 'ABCDEFGH:/MNRPQR/'; echo "Original: $var<hr />\n"; /* 这两个例子使用 “bob” 替换整个 $var。*/ echo substr_replace($var, 'bob', 0) . "<br />\n"; echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n"; /* 将 “bob” 插入到 $var 的开头处。*/ echo substr_replace($var, 'bob', 0, 0) . "<br />\n"; /* 下面两个例子使用 “bob” 替换 $var 中的 “MNRPQR”。*/ echo substr_replace($var, 'bob', 10, -1) . "<br />\n"; echo substr_replace($var, 'bob', -7, -1) . "<br />\n"; /* 从 $var 中删除 “MNRPQR”。*/ echo substr_replace($var, '', 10, -1) . "<br />\n";
17. 转换相关
```php
[chr](https://www.php.net/manual/zh/function.chr.php) — 返回指定的字符
```php
chr(int $ascii): string
<?php
echo "48 - >" . chr(48) . "<br>";
echo "65 - >" . chr(65) . "<br>";
echo "97 - >" . chr(97) . "<br>";
?>
ord — 转换字符串第一个字节为 0-255 之间的值
ord(string $string): int<?php echo "0 - >" . ord("0") . "<br>"; echo "A - >" . ord("A") . "<br>"; echo "a - >" . ord("a") . "<br>"; echo "ab - >" . ord("ab") . "<br>"; // 只转换字符串的第一个字符 ?>ucfirst — 将字符串的首字母转换为大写
ucfirst(string $str): string<?php $foo = 'hello world!'; $foo = ucfirst($foo); // Hello world! $bar = 'HELLO WORLD!'; $bar = ucfirst($bar); // HELLO WORLD! $bar = ucfirst(strtolower($bar)); // Hello world! ?>ucwords — 将字符串中每个单词的首字母转换为大写
ucwords(string $str, string $delimiters = " \t\r\n\f\v" ): string<?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! echo $foo . "<br>"; $foo = 'HELLO WORLD!'; $foo = ucwords($foo); // HELLO WORLD! $foo = ucwords(strtolower($foo)); // Hello World! echo $foo . "<br>"; $foo = 'hello|world!'; $foo = ucwords($foo); // Hello|world! echo $foo . "<br>"; $foo = ucwords($foo, "|"); // Hello|World! echo $foo . "<br>"; ?>
lcfirst — 使一个字符串的第一个字符小写
lcfirst(string $str): string```php <?php $foo = ‘HelloWorld’; $foo = lcfirst($foo); // helloWorld
$bar = ‘HELLO WORLD!’; $bar = lcfirst($bar); // hELLO WORLD! $bar = lcfirst(strtoupper($bar)); // hELLO WORLD! ?>
- [strtolower](https://www.php.net/manual/zh/function.strtolower.php) — 将字符串转化为小写
```php
strtolower(string $string): string
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str; // 打印 mary had a little lamb and she loved it so
?>
strtoupper — 将字符串转化为大写
strtoupper(string $string): string<?php $str = "Mary Had A Little Lamb and She LOVED It So"; $str = strtoupper($str); echo $str; // 打印 MARY HAD A LITTLE LAMB AND SHE LOVED IT SO ?>strip_tags — 从字符串中去除 HTML 和 PHP 标记
strip_tags(string $str, string $allowable_tags = ?): string<?php $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; echo strip_tags($text); // 允许 <p> 和 <a> echo strip_tags($text, '<p><a>'); ?>
str_shuffle — 随机打乱一个字符串
str_shuffle(string $str): string<?php $s = "Hello World"; echo $s . "<br>"; echo str_shuffle($s); ?>
htmlspecialchars — 将特殊字符转换为 HTML 实体
htmlspecialchars( string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = ini_get("default_charset"), bool $double_encode = true ): string| 字符 | 替换后 | | :—————- | :—————————————————————————————- | |
&(& 符号) |&| |"(双引号) |",除非设置了ENT_NOQUOTES| |'(单引号) | 设置了ENT_QUOTES后,'(如果是ENT_HTML401) ,或者'(如果是ENT_XML1、ENT_XHTML或ENT_HTML5)。 | |<(小于) |<| |>(大于) |>|<?php $s = "<a href='test'>Test</a>"; $new = htmlspecialchars($s, ENT_QUOTES); echo $new; // <a href='test'>Test</a> echo "<br>"; echo $s; ?>
18.分割连接
```php
[substr](https://www.php.net/manual/zh/function.substr.php) — 返回字符串的子串
```php
substr(string $string, int $offset, ?int $length = null): string
<?php
echo substr("abcdef", 3) . "<br>"; // 返回 "def"
echo substr("abcdef", 0, -1) . "<br>"; // 返回 "abcde"
echo substr("abcdef", 2, -1) . "<br>";; // 返回 "cde"
echo substr("abcdef", 4, -4) . "<br>";; // 返回 ""; 在 PHP 8.0.0 之前,返回 false
echo substr("abcdef", -3, -1) . "<br>";; // 返回 "de"
?>
str_split — 将字符串转换为数组
str_split(string $string, int $split_length = 1): array<?php $str = "Hello Friend"; $arr1 = str_split($str); $arr2 = str_split($str, 3); print_r($arr1); print_r($arr2); ?>explode — 使用一个字符串分割另一个字符串
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array<?php // 示例 1 $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // piece1 echo '<br>'; echo $pieces[1]; // piece2 echo '<br>'; // 示例 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; $arr = explode(":", $data); var_dump($arr); ?>
implode — 将一个一维数组的值转化为字符串
implode(string $glue, array $pieces): string implode(array $pieces): string<?php $array = array('lastname', 'email', 'phone'); echo implode($array); echo '<br>'; echo implode(",", $array); echo '<br>'; echo implode("--", $array); echo '<br>'; // Empty string when using an empty array: var_dump(implode('hello', array())); // string(0) "" ?>
join — 别名 implode
strstr — 查找字符串的首次出现, 返回
haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串。<?php header("content-type:text/html;charset=utf8"); $s = "Hello php hello mysql"; echo strstr($s, "hello"); echo "<br>"; echo strstr($s, "php"); echo "<br>"; ?>
stristr — strstr 函数的忽略大小写版本
<?php header("content-type:text/html;charset=utf8"); $s = "Hello php hello mysql"; echo stristr($s, "hello"); echo "<br>"; echo stristr($s, "php"); echo "<br>"; ?>
- strchr — 别名 strstr
19.去除空白
```php
- [ltrim](https://www.php.net/manual/zh/function.ltrim.php) — 删除字符串开头的空白字符(或其他字符)
```php
<?php
header("content-type:text/html;charset=utf8");
$s1 = " hello world ";
echo "|" . $s1 . "|";
echo "<br>";
echo "|" . ltrim($s1) . "|";
echo "<br>";
?>
rtrim — 删除字符串末端的空白字符(或者其他字符)
<?php header("content-type:text/html;charset=utf8"); $s1 = " hello world "; echo "|" . $s1 . "|"; echo "<br>"; echo "|" . rtrim($s1) . "|"; echo "<br>"; ?>
trim — 去除字符串首尾处的空白字符(或者其他字符)
<?php header("content-type:text/html;charset=utf8"); $s1 = " hello world "; echo "|" . $s1 . "|"; echo "<br>"; echo "|" . trim($s1) . "|"; echo "<br>"; ?>
20.加密
```php
- [md5](https://www.php.net/manual/zh/function.md5.php) — 计算字符串的 MD5 散列值
```php
<?php
header("content-type:text/html;charset=utf8");
$s1 = "heLloworld";
echo $s1;
echo "<br>";
echo md5($s1);
echo "<br>";
?>
21.反转字符串
```php
- [strrev](https://www.php.net/manual/zh/function.strrev.php) — 反转字符串
```php
<?php
header("content-type:text/html;charset=utf8");
$s1 = "heLloworld";
echo $s1;
echo "<br>";
echo strrev($s1);
echo "<br>";
?>
```
