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、关闭文件
第二章第一节 - 图1示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $handle=fopen("doc.txt","w");
  4. fputs($handle,"你好中国");
  5. fclose($handle);

读取文件步骤:
1、打开文件
2、读取文件中的内容
3、关闭文件

第二章第一节 - 图2示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $handle=fopen("doc.txt","r");
  4. $str=fgets($handle);
  5. fclose($handle);
  6. echo$str;

2.索引数组

数组是一组数据的集合,这组数据按照一定的规则组织起来,形成一个可操作的整体。
PHP数组分类(根据数组下标不同):
索引数组
关联数组
索引数组:数组的下标是由整数数字组成,默认从 0 开始,向后每次加 1。
定义索引数组语法格式:
1、定义一个空数组
$数组名 = array();
2、定义数组并赋值
$数组名 = array( 值 , 值 , 值 … );
第二章第一节 - 图3示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("北京",100,"上海","天津");
  4. print_r($arr);

第二章第一节 - 图4代码讲解
1、定义数组并赋值
$arr = array(“北京”,100,”上海”,”天津”);
定义索引数组,并将 “北京”、100、”上海”、”天津” 这四个值存储到数组中。
$arr:是数组的名称。
在 PHP 中,通过数组名称及数组下标,可实现对数组中所有值的操作。
索引数组取值语法格式:
$数组名称[下标];
第二章第一节 - 图5示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("北京",100,"上海","天津");
  4. echo"数组中第1个值:{$arr[0]}<br/>";
  5. echo"数组中第3个值:{$arr[2]}<br/>";

第二章第一节 - 图6代码讲解
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、向数组末尾追加值
$数组名[] = 值;
第二章第一节 - 图7示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("北京",100,"上海","天津");
  4. $arr[5]="西安";
  5. $arr[1]="深圳";
  6. $arr[]="南京";
  7. print_r($arr);

第二章第一节 - 图8代码讲解
1、将值存储到数组指定下标位置
$arr[5] = “西安”;
将 “西安” 存储到 $arr 数组中 5 下标对应的位置。

2、修改数组中原有值
$arr[1] = “深圳”;
将 “深圳” 存储到 $arr 数组中 1 下标对应的位置。
注:因为 $arr 数组 1 下标原本就有值,所以此句代码,相当于将 1 下标原有值修改为 “深圳”。

3、向数组末尾追加值
$arr[] = “南京”;
将 “南京” 添加到 $arr 数组的末尾位置。

在 PHP 中,通过 count() 函数可以获得数组长度。数组长度,是指数组中存储的值的个数。

获得数组长度语法格式:
count($数组名称);

第二章第一节 - 图9示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("北京",100,"上海","天津");
  4. $len=count($arr);
  5. echo"数组长度为:{$len}";

第二章第一节 - 图10代码讲解
1、获得数组长度
$len = count($arr);
通过 count() 函数,获得 $arr 数组长度,也就是 $arr 数组中值的个数。

3.关联数组

关联数组:数组的下标是由字符串组成,当然,字符串可以包含数字。
在一个数组中,只要有一个值的下标不是数字,这个数组就是关联数组。
定义关联数组语法格式:
1、定义一个空数组
$数组名 = array();
2、定义数组并赋值
$数组名 = array( 下标=>值 , 下标=>值 , 下标=>值 … );
第二章第一节 - 图11示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("userName"=>"张小明","sex"=>"男","age"=>10);
  4. print_r($arr);

第二章第一节 - 图12代码讲解
1、定义数组并赋值
$arr = array(“userName”=>”张小明”,”sex”=>”男”,”age”=>10);
定义关联数组,并向数组中存储三个值。
在 PHP 中,关联数组的操作与索引数组几乎完成相同,只不过数组的下标有所区别。
第二章第一节 - 图13示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("userName"=>"张小明","sex"=>"男","age"=>10);
  4. $arr["address"]="北京";
  5. $arr["age"]=17;
  6. $len=count($arr);
  7. echo"姓名:{$arr["userName"]}<br/><br/>";
  8. echo"数组长度为:{$len}<br/><br/>";
  9. print_r($arr);

第二章第一节 - 图14代码讲解
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 中,一个数组中的值可以是另一个数组,另一个数组中的值也可以是一个数组,也就是说数组可以嵌套。
一维数组:没有发生嵌套的普通数组。
二维数组:两层数组的嵌套。
三维数组:三层数组的嵌套。
多维数组:多层数组的嵌套。
第二章第一节 - 图15示例

<?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>";

第二章第一节 - 图16代码讲解

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() 移除字符串两侧的空白字符或其他字符

第二章第一节 - 图17示例

<?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/>";

第二章第一节 - 图18代码讲解
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 中,提供了一系列的系统函数,用于读写文本文件的内容。

  1. 文件打开 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");
    
  1. 文件关闭 fclose()
fclose(resource $handle): bool

关闭一个已打开的文件指针,成功时返回 **true**, 或者在失败时返回 **false**

在文件操作中,关闭文件操作虽然看不到明显的效果,但是一定要关闭,否则可能会产生内存泄露.

fcolse($file);
  1. 读取一个字符 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);
    ?>
    
  1. 文件结束判断 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);
?>
  1. 读取一行内容 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);
?>
  1. 读取一行内容,并过滤 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);
?>
  1. 读取指定大小内容 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);
?>
  1. 获取文件大小 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);
?>
  1. 将整个文件读取出为一个字符串 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;
?>
  1. 将整个文件读取出并保存为一个数组 file()
file(string $filename, int $flags = 0, resource $context = ?): array

返回数组形式的文件内容。数组的每个元素对应于文件中的一行(结尾会附加换行符)。 失败时,file() 返回 **false**

<?php
   $content = file("test.txt");
   var_dump($content);
?>
  1. 向文件写入一个字符串 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);
?>
  1. 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);
?>
  1. 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.统计相关php

  • str_word_count — 返回字符串中单词的使用情况

    str_word_count(string $string, int $format = 0, ?string $characters = null): array|int
    

    format参数:

    指定函数的返回值。当前支持的值如下:

    • 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.替换相关php

  • str_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_XML1ENT_XHTMLENT_HTML5)。 | | < (小于) | < | | > (大于) | > |

    <?php
       $s = "<a href='test'>Test</a>";
       $new = htmlspecialchars($s, ENT_QUOTES);
       echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
       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>";
    ?>
    
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>";
  ?>

```