批改状态:合格
老师批语:自己动手写的, 就非常棒了
数组主要分为两种:索引数组,关联数组,多维数组
索引数组:以数字为键值,默认从 0 开始,递增 1
关联数组:带有指定的键值,每个键关联一个值
多维数组:包含一个或多个数组的数组
<?php//1.索引数组,以数字为键值,默认从0开始,逐个+1//1.1 直接申明$arr1 = [0 => '电脑', 1 => '键盘', 2 => '鼠标', 3 => '手机'];//1.2 追加的方式创建$arr2 = [];$arr2[] = '电脑';$arr2[] = '键盘';$arr2[] = '鼠标';$arr2[] = '手机';printf("<pre>%s</pre>", print_r($arr1, true));printf("<pre>%s</pre>", print_r($arr2, true));//访问数组中第一个元素echo $arr1[0], '<br>';//访问数组中最后一个元素echo $arr1[3], '<br>';//2.关联数组,使用指定的键,每一个键对应一个值$info = ['id' => 101,'name' => 'demo','age' => 27];printf("<pre>%s</pre>", print_r($info, true));echo '姓名: ' . $info['name'] . ' , 年龄: ' . $info['age'] . '<br>';//3.多维数组,有一个或者多个数组组成的数组$users = [0 => ['id' => 100, 'name' => 'demo1', 'age' => 22],1 => ['id' => 101, 'name' => 'demo2', 'age' => 23],2 => ['id' => 102, 'name' => 'demo3', 'age' => 24],];echo '姓名: ' . $users[0]['name'] . ' , 年龄: ' . $users[0]['age'] . '<br>';echo '姓名: ' . $users[1]['name'] . ' , 年龄: ' . $users[1]['age'] . '<br>';echo '姓名: ' . $users[2]['name'] . ' , 年龄: ' . $users[2]['age'] . '<br>';
代码执行结果如图:
数组的遍历可以分为以下几种:
<?php//数组的遍历$info = ['id' => 101,'name' => 'demo','age' => 27,'course' => 'php'];//1.通过指针,逐个遍历//key()获取当前数组的键,current() 获取数组的值printf('[ %s ] => %s <br>', key($info), current($info));next($info); //指针下移printf('[ %s ] => %s <br>', key($info), current($info));next($info);printf('[ %s ] => %s <br>', key($info), current($info));next($info);printf('[ %s ] => %s <br>', key($info), current($info));echo '<hr>';//指针前移,指向上一个元素prev($info);printf('[ %s ] => %s <br>', key($info), current($info));prev($info);printf('[ %s ] => %s <br>', key($info), current($info));prev($info);printf('[ %s ] => %s <br>', key($info), current($info));echo '<hr>';//指针复位,指向第一个元素reset($info);printf('[ %s ] => %s <br>', key($info), current($info));//指针指向最后一个元素end($info);printf('[ %s ] => %s <br>', key($info), current($info));echo '<hr>';//2.通过while循环遍历reset($info);while (true) {printf('[ %s ] => %s <br>', key($info), current($info));// 下一个元素如果为空,循环结束if (!next($info)) break;}echo '<hr>';//3.通过for循环遍历//计算数组元素的个数,作为循环次数reset($info);$num = count($info);//echo $num;for ($i = 0; $i < $num; $i++) {printf('[ %s ] => %s <br>', key($info), current($info));next($info);}//4.foreach()遍历 指针自动下移echo '<hr>';reset($info);foreach ($info as $key => $val) {printf('[ %s ] => %s <br>', $key, $val);}
代码执行结果如图:
<?php//数组函数//数组解构 list() 不是函数,函数不能放在等号左边,是语法结构list($a, $b, $c) = [100, 101, 102];echo $a . ' --- ' . $b . ' --- ' . $c . '<br>';$info = ['id' => 101,'name' => 'demo','age' => 27,'course' => 'php'];//php7.1版本后支持关联数组list('id' => $id, 'name' => $name, 'age' => $age, 'course' => $course) = $info;echo 'ID: ' . $id . ' 姓名: ' . $name . ' 年龄: ' . $age . ' 报名课程: ' . $course . '<br>';$users = [['id' => 100, 'name' => 'demo1', 'age' => 22, 'course' => 'php'],['id' => 101, 'name' => 'demo2', 'age' => 23, 'course' => 'javascript'],['id' => 102, 'name' => 'demo3', 'age' => 24, 'course' => 'html'],];//1.数组遍历函数 foreach()foreach ($users as $user) {echo 'ID: ' . $user['id'] . ' 姓名: ' . $user['name'] . ' 年龄: ' . $user['age'] . ' 报名课程: ' . $user['course'] . '<br>';}//可以使用list()将as 的数组解构foreach ($users as list('id' => $id, 'name' => $name, 'age' => $age, 'course' => $course)) {echo 'ID: ' . $id . ' 姓名: ' . $name . ' 年龄: ' . $age . ' 报名课程: ' . $course . '<br>';}//2.array_keys 获取数组的键,组成一个新数组echo '<hr>';$keys = array_keys($info);printf("<pre>%s</pre>", print_r($keys, true));echo '<hr>';//3.array_keys_exists() 判断一个字符串是否是数组的键$info = ['id' => 101,'name' => 'demo','age' => 27,'course' => 'php'];//$key = 'name';$key = 'Name';//判断$key 是否是数组$info的键if (array_key_exists($key, $info)) {echo $key . ' 是数组的建名<br>';} else {echo $key . ' 不是数组的建名<br>';}echo '<hr>';//4.array_value() 获取数组的值,重新组成一个数组,通常用于重置数组的键$new_info = array_values($info);printf("<pre>%s</pre>", print_r($new_info, true));//5. in_array()判断一个值是否在数组中$courses = ['php7.2', 'html5', 'javascript', 'css3'];//$course = 'php7';$course = 'php7.2';if (in_array($course, $courses)) {echo $course . ' 在数组中<br>';} else {echo $course . ' 不在数组中<br>';}//或者可以使用array_search() 查询数组中是否有指定的元素,如果存在返回对应的键名,不存在返回false//echo array_search($course, $courses);if (array_search($course, $courses) !== false) {echo $course . ' 在数组中<br>';} else {echo $course . ' 不在数组中<br>';}//6.array_unique() 用于数组的去重$arr = [101, 102, 103, 104, 199, 188, 102, 104, 99];printf("<pre>%s</pre>", print_r($arr, true));$arr = array_unique($arr);printf("<pre>%s</pre>", print_r($arr, true));//7.array_sum() 用于计算数组内值的和$sum = array_sum($arr);echo $sum;//8.栈和队列//栈操作 先进后出//array_push() 从尾部进入//array_pop() 从尾部取出,返回被取出的值$arr = [];array_push($arr, 1);array_push($arr, 2);array_push($arr, 3, 4, 5);printf("<pre>%s</pre>", print_r($arr, true));$first = array_pop($arr);$second = array_pop($arr);echo $first, '<br>';echo $second, '<br>';printf("<pre>%s</pre>", print_r($arr, true));//队列操作 后进先出//array_unshift() 入队操作//array_shift() 出队操作$arr = [];array_unshift($arr, 10);array_unshift($arr, 9);array_unshift($arr, 8);array_unshift($arr, 7, 6);printf("<pre>%s</pre>", print_r($arr, true));$first = array_shift($arr);$second = array_shift($arr);echo $first, '<br>';echo $second, '<br>';printf("<pre>%s</pre>", print_r($arr, true));echo '<hr>';//8.排序// 8.1 sort() 数组升序排列$arr = ['apple' => 11,'huawei' => 40,'xiaomi' => 10];sort($arr);printf("<pre>%s</pre>", print_r($arr, true));//8.2 rsort() 数组降序排列$arr = ['apple' => 11,'huawei' => 40,'xiaomi' => 10];rsort($arr);printf("<pre>%s</pre>", print_r($arr, true));//8.3 asort() 根据关联数组的值进行升序排列$arr = ['apple' => 11,'huawei' => 40,'xiaomi' => 10];asort($arr);printf("<pre>%s</pre>", print_r($arr, true));//8.4 arsort() 根据关联数组的值进行降序排列$arr = ['apple' => 11,'huawei' => 40,'xiaomi' => 10];arsort($arr);printf("<pre>%s</pre>", print_r($arr, true));//8.5 ksort() 根据关联数组的键进行升序排列$arr = ['apple' => 11,'huawei' => 40,'xiaomi' => 10];ksort($arr);printf("<pre>%s</pre>", print_r($arr, true));//8.6 krsort() 根据关联数组的键进行降序排列$arr = ['apple' => 11,'huawei' => 40,'xiaomi' => 10];krsort($arr);printf("<pre>%s</pre>", print_r($arr, true));echo '<hr>';//9. extract() 将关联数组的键作为一个变量名,值作为一个变量的值$arr = ['id' => 101, 'name' => 'demo', 'age' => 18];extract($arr);echo 'ID: ' . $id . ' 姓名: ' . $name . ' 年龄: ' . $age . '<br>';
代码执行结果如图:

实现常用的 CURD 操作,首先,先连接数据库
<?php//连接数据库//载入配置$conf = require "config.php";//将配置数组分解成独立变量extract($conf);$mysqli = new mysqli($host, $username, $password, $dbname);//如果mysqli对象的connect_errno 的值不为0 ,返回错误信息,并终止程序if ($mysqli->connect_errno) die('连接失败:' . $mysqli->connect_error);//设置字符编码集$mysqli->set_charset($charset);
数据库配置文件 config.php
<?phpreturn [//类型'type' => $type ?? 'mysql',//主机名'host' => $host ?? 'localhost',//用户'username' => $username ?? 'root',//密码'password' => $password ?? 'root',//默认端口'port' => $port ?? '3306',//默认编码集'charset' => $charset ?? 'utf8',//默认数据库'dbname' => $dbname ?? 'php_edu'];
新增单条数据
<?php//mysqli面向对象实现新增操作(INSERT)//1.连接数据库require "connect.php";//2.操作数据表//生成sql语句的模版对象//$sql = "INSERT `users` (`name`,`email`,`password`) VALUES (?,?,?);";$sql = "INSERT `users` SET `name`=? , `email`=? , `password`=?;";//prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)//在执行时给模版中的占位符赋值$stmt = $mysqli->prepare($sql);//给占位符绑定变量名 s :字符串 i: 整数$stmt->bind_param('sss', $name, $email, $password);$arr = ['name' => 'demo1','email' => 'demo1@qq.com','password' => sha1('123'),];extract($arr);//执行sql 语句,如果失败,打印出出错信息$stmt->execute() or die($stmt->error);//对执行结果进行处理//$stmt->affected_rows 返回影响条数//$stmt->insert_id 返回新增数据的IDprintf('成功新增 %s 条记录,新增的主键ID为: %d' , $stmt->affected_rows,$stmt->insert_id);//关闭连接$mysqli->close();
代码执行结果如图:

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

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

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

1.使用fetch_all()和foreach()显示数据
<?php//mysqli面向对象实现查询操作(SELECT)//1.连接数据库require "connect.php";//2.操作数据表//生成sql语句的模版对象$sql = "SELECT `id`,`name`,`email` FROM `users` WHERE `id` > ? ;";//prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)//在执行时给模版中的占位符赋值$stmt = $mysqli->prepare($sql);//给占位符绑定变量名 s :字符串 i: 整数$stmt->bind_param('i', $id);$id = 10;//执行sql 语句,如果失败,打印出出错信息$stmt->execute() or die($stmt->error);//对执行结果进行处理//查询操作 execute() 执行后会生成一个结果集对象//get_result() 获取结果集对象$res = $stmt->get_result();if ($res->num_rows === 0) exit('结果为空');//获取所有记录 MYSQLI_ASSOC 返回关联的部分$users = $res->fetch_all(MYSQLI_ASSOC);//对获取的数据进行处理echo "<table border='1' cellspacing='0' cellpadding='10'>";echo "<tr>";echo "<th>ID</th>";echo "<th>姓名</th>";echo "<th>邮箱</th>";echo "</tr>";foreach ($users as $user) {echo "<tr>";echo "<th>" . $user['id'] . "</th>";echo "<th>" . $user['name'] . "</th>";echo "<th>" . $user['email'] . "</th>";echo "</tr>";}echo "</table>";//释放结果集$res->free();//关闭连接$mysqli->close();
2.使用bind_result() ,store_result(),fetch()和while()方法 显示数据
<?php//mysqli面向对象实现查询操作(SELECT) bind_result + store_result()//1.连接数据库require "connect.php";//2.操作数据表//生成sql语句的模版对象$sql = "SELECT `id`,`name`,`email` FROM `users` WHERE `id` > ? ;";//prepare相当于sql语句的构造方法,用于创建一个预处理对象(sql语句对象)//在执行时给模版中的占位符赋值$stmt = $mysqli->prepare($sql);//给占位符绑定变量名 s :字符串 i: 整数$stmt->bind_param('i', $id);$id = 10;//执行sql 语句,如果失败,打印出出错信息$stmt->execute() or die($stmt->error);//将当前结果的字段名称与对应的变量名进行绑定$stmt->bind_result($id, $name, $email);//将当前字段的值与具体变量名进行绑定$stmt->store_result();if ($stmt->num_rows === 0) exit('没有数据');//对获取的数据进行处理//使用$stmt->fetch() 自动下移指针echo "<table border='1' cellspacing='0' cellpadding='10'>";echo "<tr>";echo "<th>ID</th>";echo "<th>姓名</th>";echo "<th>邮箱</th>";echo "</tr>";while ($stmt->fetch()) {echo "<tr>";echo "<th>" . $id . "</th>";echo "<th>" . $name . "</th>";echo "<th>" . $email . "</th>";echo "</tr>";}echo "</table>";//关闭连接$mysqli->close();
代码执行结果如图:
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号