Blogger Information
Blog 6
fans 0
comment 0
visits 6297
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础知识小结2
J
Original
667 people have browsed it

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();

代码执行结果如图:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:自己动手写的, 就非常棒了
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post