博客列表 >PHP基础知识小结2

PHP基础知识小结2

J
J原创
2020年08月26日 19:36:24666浏览

1. 数组的种类与定义与访问方式

数组主要分为两种:索引数组,关联数组多维数组
索引数组:以数字为键值,默认从 0 开始,递增 1
关联数组:带有指定的键值,每个键关联一个值
多维数组:包含一个或多个数组的数组

  1. <?php
  2. //1.索引数组,以数字为键值,默认从0开始,逐个+1
  3. //1.1 直接申明
  4. $arr1 = [0 => '电脑', 1 => '键盘', 2 => '鼠标', 3 => '手机'];
  5. //1.2 追加的方式创建
  6. $arr2 = [];
  7. $arr2[] = '电脑';
  8. $arr2[] = '键盘';
  9. $arr2[] = '鼠标';
  10. $arr2[] = '手机';
  11. printf("<pre>%s</pre>", print_r($arr1, true));
  12. printf("<pre>%s</pre>", print_r($arr2, true));
  13. //访问数组中第一个元素
  14. echo $arr1[0], '<br>';
  15. //访问数组中最后一个元素
  16. echo $arr1[3], '<br>';
  17. //2.关联数组,使用指定的键,每一个键对应一个值
  18. $info = [
  19. 'id' => 101,
  20. 'name' => 'demo',
  21. 'age' => 27
  22. ];
  23. printf("<pre>%s</pre>", print_r($info, true));
  24. echo '姓名: ' . $info['name'] . ' , 年龄: ' . $info['age'] . '<br>';
  25. //3.多维数组,有一个或者多个数组组成的数组
  26. $users = [
  27. 0 => ['id' => 100, 'name' => 'demo1', 'age' => 22],
  28. 1 => ['id' => 101, 'name' => 'demo2', 'age' => 23],
  29. 2 => ['id' => 102, 'name' => 'demo3', 'age' => 24],
  30. ];
  31. echo '姓名: ' . $users[0]['name'] . ' , 年龄: ' . $users[0]['age'] . '<br>';
  32. echo '姓名: ' . $users[1]['name'] . ' , 年龄: ' . $users[1]['age'] . '<br>';
  33. echo '姓名: ' . $users[2]['name'] . ' , 年龄: ' . $users[2]['age'] . '<br>';

代码执行结果如图:

2. 数组的遍历有几种,实例实现

数组的遍历可以分为以下几种:

  • 通过指针,逐个遍历
  • 通过 while 循环遍历
  • 通过 for 循环遍历
  • foreach()遍历
  1. <?php
  2. //数组的遍历
  3. $info = [
  4. 'id' => 101,
  5. 'name' => 'demo',
  6. 'age' => 27,
  7. 'course' => 'php'
  8. ];
  9. //1.通过指针,逐个遍历
  10. //key()获取当前数组的键,current() 获取数组的值
  11. printf('[ %s ] => %s <br>', key($info), current($info));
  12. next($info); //指针下移
  13. printf('[ %s ] => %s <br>', key($info), current($info));
  14. next($info);
  15. printf('[ %s ] => %s <br>', key($info), current($info));
  16. next($info);
  17. printf('[ %s ] => %s <br>', key($info), current($info));
  18. echo '<hr>';
  19. //指针前移,指向上一个元素
  20. prev($info);
  21. printf('[ %s ] => %s <br>', key($info), current($info));
  22. prev($info);
  23. printf('[ %s ] => %s <br>', key($info), current($info));
  24. prev($info);
  25. printf('[ %s ] => %s <br>', key($info), current($info));
  26. echo '<hr>';
  27. //指针复位,指向第一个元素
  28. reset($info);
  29. printf('[ %s ] => %s <br>', key($info), current($info));
  30. //指针指向最后一个元素
  31. end($info);
  32. printf('[ %s ] => %s <br>', key($info), current($info));
  33. echo '<hr>';
  34. //2.通过while循环遍历
  35. reset($info);
  36. while (true) {
  37. printf('[ %s ] => %s <br>', key($info), current($info));
  38. // 下一个元素如果为空,循环结束
  39. if (!next($info)) break;
  40. }
  41. echo '<hr>';
  42. //3.通过for循环遍历
  43. //计算数组元素的个数,作为循环次数
  44. reset($info);
  45. $num = count($info);
  46. //echo $num;
  47. for ($i = 0; $i < $num; $i++) {
  48. printf('[ %s ] => %s <br>', key($info), current($info));
  49. next($info);
  50. }
  51. //4.foreach()遍历 指针自动下移
  52. echo '<hr>';
  53. reset($info);
  54. foreach ($info as $key => $val) {
  55. printf('[ %s ] => %s <br>', $key, $val);
  56. }

代码执行结果如图:

3.数组函数

  1. <?php
  2. //数组函数
  3. //数组解构 list() 不是函数,函数不能放在等号左边,是语法结构
  4. list($a, $b, $c) = [100, 101, 102];
  5. echo $a . ' --- ' . $b . ' --- ' . $c . '<br>';
  6. $info = [
  7. 'id' => 101,
  8. 'name' => 'demo',
  9. 'age' => 27,
  10. 'course' => 'php'
  11. ];
  12. //php7.1版本后支持关联数组
  13. list('id' => $id, 'name' => $name, 'age' => $age, 'course' => $course) = $info;
  14. echo 'ID: ' . $id . ' 姓名: ' . $name . ' 年龄: ' . $age . ' 报名课程: ' . $course . '<br>';
  15. $users = [
  16. ['id' => 100, 'name' => 'demo1', 'age' => 22, 'course' => 'php'],
  17. ['id' => 101, 'name' => 'demo2', 'age' => 23, 'course' => 'javascript'],
  18. ['id' => 102, 'name' => 'demo3', 'age' => 24, 'course' => 'html'],
  19. ];
  20. //1.数组遍历函数 foreach()
  21. foreach ($users as $user) {
  22. echo 'ID: ' . $user['id'] . ' 姓名: ' . $user['name'] . ' 年龄: ' . $user['age'] . ' 报名课程: ' . $user['course'] . '<br>';
  23. }
  24. //可以使用list()将as 的数组解构
  25. foreach ($users as list('id' => $id, 'name' => $name, 'age' => $age, 'course' => $course)) {
  26. echo 'ID: ' . $id . ' 姓名: ' . $name . ' 年龄: ' . $age . ' 报名课程: ' . $course . '<br>';
  27. }
  28. //2.array_keys 获取数组的键,组成一个新数组
  29. echo '<hr>';
  30. $keys = array_keys($info);
  31. printf("<pre>%s</pre>", print_r($keys, true));
  32. echo '<hr>';
  33. //3.array_keys_exists() 判断一个字符串是否是数组的键
  34. $info = [
  35. 'id' => 101,
  36. 'name' => 'demo',
  37. 'age' => 27,
  38. 'course' => 'php'
  39. ];
  40. //$key = 'name';
  41. $key = 'Name';
  42. //判断$key 是否是数组$info的键
  43. if (array_key_exists($key, $info)) {
  44. echo $key . ' 是数组的建名<br>';
  45. } else {
  46. echo $key . ' 不是数组的建名<br>';
  47. }
  48. echo '<hr>';
  49. //4.array_value() 获取数组的值,重新组成一个数组,通常用于重置数组的键
  50. $new_info = array_values($info);
  51. printf("<pre>%s</pre>", print_r($new_info, true));
  52. //5. in_array()判断一个值是否在数组中
  53. $courses = ['php7.2', 'html5', 'javascript', 'css3'];
  54. //$course = 'php7';
  55. $course = 'php7.2';
  56. if (in_array($course, $courses)) {
  57. echo $course . ' 在数组中<br>';
  58. } else {
  59. echo $course . ' 不在数组中<br>';
  60. }
  61. //或者可以使用array_search() 查询数组中是否有指定的元素,如果存在返回对应的键名,不存在返回false
  62. //echo array_search($course, $courses);
  63. if (array_search($course, $courses) !== false) {
  64. echo $course . ' 在数组中<br>';
  65. } else {
  66. echo $course . ' 不在数组中<br>';
  67. }
  68. //6.array_unique() 用于数组的去重
  69. $arr = [101, 102, 103, 104, 199, 188, 102, 104, 99];
  70. printf("<pre>%s</pre>", print_r($arr, true));
  71. $arr = array_unique($arr);
  72. printf("<pre>%s</pre>", print_r($arr, true));
  73. //7.array_sum() 用于计算数组内值的和
  74. $sum = array_sum($arr);
  75. echo $sum;
  76. //8.栈和队列
  77. //栈操作 先进后出
  78. //array_push() 从尾部进入
  79. //array_pop() 从尾部取出,返回被取出的值
  80. $arr = [];
  81. array_push($arr, 1);
  82. array_push($arr, 2);
  83. array_push($arr, 3, 4, 5);
  84. printf("<pre>%s</pre>", print_r($arr, true));
  85. $first = array_pop($arr);
  86. $second = array_pop($arr);
  87. echo $first, '<br>';
  88. echo $second, '<br>';
  89. printf("<pre>%s</pre>", print_r($arr, true));
  90. //队列操作 后进先出
  91. //array_unshift() 入队操作
  92. //array_shift() 出队操作
  93. $arr = [];
  94. array_unshift($arr, 10);
  95. array_unshift($arr, 9);
  96. array_unshift($arr, 8);
  97. array_unshift($arr, 7, 6);
  98. printf("<pre>%s</pre>", print_r($arr, true));
  99. $first = array_shift($arr);
  100. $second = array_shift($arr);
  101. echo $first, '<br>';
  102. echo $second, '<br>';
  103. printf("<pre>%s</pre>", print_r($arr, true));
  104. echo '<hr>';
  105. //8.排序
  106. // 8.1 sort() 数组升序排列
  107. $arr = [
  108. 'apple' => 11,
  109. 'huawei' => 40,
  110. 'xiaomi' => 10
  111. ];
  112. sort($arr);
  113. printf("<pre>%s</pre>", print_r($arr, true));
  114. //8.2 rsort() 数组降序排列
  115. $arr = [
  116. 'apple' => 11,
  117. 'huawei' => 40,
  118. 'xiaomi' => 10
  119. ];
  120. rsort($arr);
  121. printf("<pre>%s</pre>", print_r($arr, true));
  122. //8.3 asort() 根据关联数组的值进行升序排列
  123. $arr = [
  124. 'apple' => 11,
  125. 'huawei' => 40,
  126. 'xiaomi' => 10
  127. ];
  128. asort($arr);
  129. printf("<pre>%s</pre>", print_r($arr, true));
  130. //8.4 arsort() 根据关联数组的值进行降序排列
  131. $arr = [
  132. 'apple' => 11,
  133. 'huawei' => 40,
  134. 'xiaomi' => 10
  135. ];
  136. arsort($arr);
  137. printf("<pre>%s</pre>", print_r($arr, true));
  138. //8.5 ksort() 根据关联数组的键进行升序排列
  139. $arr = [
  140. 'apple' => 11,
  141. 'huawei' => 40,
  142. 'xiaomi' => 10
  143. ];
  144. ksort($arr);
  145. printf("<pre>%s</pre>", print_r($arr, true));
  146. //8.6 krsort() 根据关联数组的键进行降序排列
  147. $arr = [
  148. 'apple' => 11,
  149. 'huawei' => 40,
  150. 'xiaomi' => 10
  151. ];
  152. krsort($arr);
  153. printf("<pre>%s</pre>", print_r($arr, true));
  154. echo '<hr>';
  155. //9. extract() 将关联数组的键作为一个变量名,值作为一个变量的值
  156. $arr = ['id' => 101, 'name' => 'demo', 'age' => 18];
  157. extract($arr);
  158. echo 'ID: ' . $id . ' 姓名: ' . $name . ' 年龄: ' . $age . '<br>';

代码执行结果如图:

4.mysqli 面向对象实现常用的 CURD 操作

实现常用的 CURD 操作,首先,先连接数据库

  1. <?php
  2. //连接数据库
  3. //载入配置
  4. $conf = require "config.php";
  5. //将配置数组分解成独立变量
  6. extract($conf);
  7. $mysqli = new mysqli($host, $username, $password, $dbname);
  8. //如果mysqli对象的connect_errno 的值不为0 ,返回错误信息,并终止程序
  9. if ($mysqli->connect_errno) die('连接失败:' . $mysqli->connect_error);
  10. //设置字符编码集
  11. $mysqli->set_charset($charset);

数据库配置文件 config.php

  1. <?php
  2. return [
  3. //类型
  4. 'type' => $type ?? 'mysql',
  5. //主机名
  6. 'host' => $host ?? 'localhost',
  7. //用户
  8. 'username' => $username ?? 'root',
  9. //密码
  10. 'password' => $password ?? 'root',
  11. //默认端口
  12. 'port' => $port ?? '3306',
  13. //默认编码集
  14. 'charset' => $charset ?? 'utf8',
  15. //默认数据库
  16. 'dbname' => $dbname ?? 'php_edu'
  17. ];

1.使用 mysqli 面向对象实现新增操作(INSERT)

新增单条数据

  1. <?php
  2. //mysqli面向对象实现新增操作(INSERT)
  3. //1.连接数据库
  4. require "connect.php";
  5. //2.操作数据表
  6. //生成sql语句的模版对象
  7. //$sql = "INSERT `users` (`name`,`email`,`password`) VALUES (?,?,?);";
  8. $sql = "INSERT `users` SET `name`=? , `email`=? , `password`=?;";
  9. //prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)
  10. //在执行时给模版中的占位符赋值
  11. $stmt = $mysqli->prepare($sql);
  12. //给占位符绑定变量名 s :字符串 i: 整数
  13. $stmt->bind_param('sss', $name, $email, $password);
  14. $arr = [
  15. 'name' => 'demo1',
  16. 'email' => 'demo1@qq.com',
  17. 'password' => sha1('123'),
  18. ];
  19. extract($arr);
  20. //执行sql 语句,如果失败,打印出出错信息
  21. $stmt->execute() or die($stmt->error);
  22. //对执行结果进行处理
  23. //$stmt->affected_rows 返回影响条数
  24. //$stmt->insert_id 返回新增数据的ID
  25. printf('成功新增 %s 条记录,新增的主键ID为: %d' , $stmt->affected_rows,$stmt->insert_id);
  26. //关闭连接
  27. $mysqli->close();

代码执行结果如图:

新增多条记录

  1. <?php
  2. //mysqli面向对象实现新增多条数据操作(INSERT)
  3. //1.连接数据库
  4. require "connect.php";
  5. //2.操作数据表
  6. //生成sql语句的模版对象
  7. $sql = "INSERT `users` SET `name`=? , `email`=? , `password`=?;";
  8. //prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)
  9. //在执行时给模版中的占位符赋值
  10. $stmt = $mysqli->prepare($sql);
  11. //给占位符绑定变量名 s :字符串 i: 整数
  12. $stmt->bind_param('sss', $name, $email, $password);
  13. $uses = [
  14. ['name' => 'demo1', 'email' => 'demo1@qq.com', 'password' => sha1('123')],
  15. ['name' => 'demo2', 'email' => 'demo2@qq.com', 'password' => sha1('456')],
  16. ['name' => 'demo3', 'email' => 'demo3@qq.com', 'password' => sha1('789')],
  17. ];
  18. foreach ($uses as $user) {
  19. extract($user);
  20. if ($stmt->execute())
  21. printf('成功新增 %s 条记录,新增的主键ID为: %d <br>', $stmt->affected_rows, $stmt->insert_id);
  22. else
  23. die(printf('新增失败,%d %s', $stmt->errno, $stmt->error));
  24. }
  25. //关闭连接
  26. $mysqli->close();

代码执行结果如下:

2.使用 mysqli 面向对象实现更新操作(UPDATE)

  1. <?php
  2. //mysqli面向对象实现更新操作(UPDATE)
  3. //1.连接数据库
  4. require "connect.php";
  5. //2.操作数据表
  6. //生成sql语句的模版对象 更新必须加上更新条件
  7. $sql = "UPDATE `users` SET `name`=? , `email`=? , `password`=? WHERE `id`=?;";
  8. //在执行时给模版中的占位符赋值
  9. $stmt = $mysqli->prepare($sql);
  10. //给占位符绑定变量名 s :字符串 i: 整数
  11. $stmt->bind_param('sssi', $name, $email, $password, $id);
  12. $arr = [
  13. 'name' => '龙傲天',
  14. 'email' => 'lat@qq.com',
  15. 'password' => sha1('666666'),
  16. 'id' => 8
  17. ];
  18. extract($arr);
  19. //执行sql 语句,如果失败,打印出出错信息
  20. $stmt->execute() or die($stmt->error);
  21. //对执行结果进行处理
  22. if ($stmt->affected_rows === 1)
  23. printf('成功更新 %s 条记录', $stmt->affected_rows);
  24. else echo '没有可更新数据';
  25. //关闭连接
  26. $mysqli->close();

代码执行结果如图:

3.使用 mysqli 面向对象实现删除操作(DELETE)

  1. <?php
  2. //mysqli面向对象实现删除操作(DELETE)
  3. //1.连接数据库
  4. require "connect.php";
  5. //2.操作数据表
  6. //生成sql语句的模版对象 删除操作一定要加删除条件
  7. //删除单条数据
  8. $sql = "DELETE FROM `users` WHERE `id`=?;";
  9. //删除一定范围数据
  10. //$sql = "DELETE `users` WHERE `id`>?;";
  11. //在执行时给模版中的占位符赋值
  12. $stmt = $mysqli->prepare($sql);
  13. //给占位符绑定变量名 s :字符串 i: 整数
  14. $stmt->bind_param('i', $id);
  15. $id = 9;
  16. //执行sql 语句,如果失败,打印出出错信息
  17. $stmt->execute() or die($stmt->error);
  18. //对执行结果进行处理
  19. if ($stmt->affected_rows)
  20. printf('成功删除 %s 条记录', $stmt->affected_rows);
  21. else echo '没有可删除数据';
  22. //关闭连接
  23. $mysqli->close();

代码执行结果如图:

4.使用 mysqli 面向对象实现查询操作(SELECT)

1.使用fetch_all()foreach()显示数据

  1. <?php
  2. //mysqli面向对象实现查询操作(SELECT)
  3. //1.连接数据库
  4. require "connect.php";
  5. //2.操作数据表
  6. //生成sql语句的模版对象
  7. $sql = "SELECT `id`,`name`,`email` FROM `users` WHERE `id` > ? ;";
  8. //prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)
  9. //在执行时给模版中的占位符赋值
  10. $stmt = $mysqli->prepare($sql);
  11. //给占位符绑定变量名 s :字符串 i: 整数
  12. $stmt->bind_param('i', $id);
  13. $id = 10;
  14. //执行sql 语句,如果失败,打印出出错信息
  15. $stmt->execute() or die($stmt->error);
  16. //对执行结果进行处理
  17. //查询操作 execute() 执行后会生成一个结果集对象
  18. //get_result() 获取结果集对象
  19. $res = $stmt->get_result();
  20. if ($res->num_rows === 0) exit('结果为空');
  21. //获取所有记录 MYSQLI_ASSOC 返回关联的部分
  22. $users = $res->fetch_all(MYSQLI_ASSOC);
  23. //对获取的数据进行处理
  24. echo "<table border='1' cellspacing='0' cellpadding='10'>";
  25. echo "<tr>";
  26. echo "<th>ID</th>";
  27. echo "<th>姓名</th>";
  28. echo "<th>邮箱</th>";
  29. echo "</tr>";
  30. foreach ($users as $user) {
  31. echo "<tr>";
  32. echo "<th>" . $user['id'] . "</th>";
  33. echo "<th>" . $user['name'] . "</th>";
  34. echo "<th>" . $user['email'] . "</th>";
  35. echo "</tr>";
  36. }
  37. echo "</table>";
  38. //释放结果集
  39. $res->free();
  40. //关闭连接
  41. $mysqli->close();

2.使用bind_result() ,store_result(),fetch()while()方法 显示数据

  1. <?php
  2. //mysqli面向对象实现查询操作(SELECT) bind_result + store_result()
  3. //1.连接数据库
  4. require "connect.php";
  5. //2.操作数据表
  6. //生成sql语句的模版对象
  7. $sql = "SELECT `id`,`name`,`email` FROM `users` WHERE `id` > ? ;";
  8. //prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)
  9. //在执行时给模版中的占位符赋值
  10. $stmt = $mysqli->prepare($sql);
  11. //给占位符绑定变量名 s :字符串 i: 整数
  12. $stmt->bind_param('i', $id);
  13. $id = 10;
  14. //执行sql 语句,如果失败,打印出出错信息
  15. $stmt->execute() or die($stmt->error);
  16. //将当前结果的字段名称与对应的变量名进行绑定
  17. $stmt->bind_result($id, $name, $email);
  18. //将当前字段的值与具体变量名进行绑定
  19. $stmt->store_result();
  20. if ($stmt->num_rows === 0) exit('没有数据');
  21. //对获取的数据进行处理
  22. //使用$stmt->fetch() 自动下移指针
  23. echo "<table border='1' cellspacing='0' cellpadding='10'>";
  24. echo "<tr>";
  25. echo "<th>ID</th>";
  26. echo "<th>姓名</th>";
  27. echo "<th>邮箱</th>";
  28. echo "</tr>";
  29. while ($stmt->fetch()) {
  30. echo "<tr>";
  31. echo "<th>" . $id . "</th>";
  32. echo "<th>" . $name . "</th>";
  33. echo "<th>" . $email . "</th>";
  34. echo "</tr>";
  35. }
  36. echo "</table>";
  37. //关闭连接
  38. $mysqli->close();

代码执行结果如图:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议