数组处理函数和 PDO 初入
数组处理函数
- 键名相关处理函数
key()
:打印数组之中第一个成员的键名
$arr = ['id'=>1,'name'=>'gggggg','email'=>'15845457854@gmail,com'];
// 打印数组成员的键名:
echo key( $arr);
// 输出: id
next()
:将数组的下标移动到下一位。
reset()
输出数组中的当前元素和下一个元素的值,然后把数组的内部指针重置到数组中的第一个元素:
$arr = ['id'=>1,'name'=>'gggggg','email'=>'15845457854@gmail,com'];
// 打印数组成员的键名:
echo key( $arr);
next($arr); //下标移至下一位
echo '<hr>';
echo key($arr);
echo '<hr>';
reset($arr); //重置下标恢复到第一位
echo key($arr);
array_keys()
返回一个数组,数组内的成员是原数组之中成员的键名。
$arr = ['id'=>1,'name'=>'gggggg','email'=>'15845457854@gmail,com'];
print_r(array_keys($arr));
// 返回值:Array ( [0] => id [1] => name [2] => email )
array_values()
返回一个数组,数组内的成员是原数组之中的所有的值(不包括键名)
,新数组的键名从 0=>1 开始递增
$arr = ['id'=>1,'name'=>'gggggg','email'=>'15845457854@gmail,com'];
print_r(array_values($arr);)
array_search()
在数组中搜索某个键值,并返回对应的键名。
不存在返回 false,存在的话返回元素值对应的键名
搜索一个值,返回这个值相对于的键名语法:
array_search("要查询的值",被查询的数组)
$arr = ['id'=>1,'name'=>'gggggg','email'=>'15845457854@gmail,com'];
print_r(array_search("ggg",$arr));
array_anique()
移除数组之中重复的值
$arr = [1,2,3,4,5,1,1,1,2,3,2,5,5,5,4,4,3,3,2,1];
print_r(array_unique($arr));
- 数组运算
返回数组之中所有成员的和:array_sum()
返回数组之中所有成员相乘的积:array_product()
返回的值是根据数组成员的类型来改变的,如果全部都为整型,最后返回的一定是
int
,但是只要有一个是浮点float
最后返回的值得类型就一定是float
;
$arr = [1,2,3,4,5,6,7,8,9];
print_r(array_sum($arr));
echo "<hr>";
print_r(array_product($arr));
- 数组的拆分于合并
array_slice()
:从数组之中删除【取出】一部分元素,并返回语法:
array_slice(数组,开始删除[取出]的位置,取出的长度)
$stu = ['id'=>101,'name'=>'张无忌','age'=>20,'course'=>'php'];
print_r(array_slice($stu,-3,2));
array_splice()
:对数组成员增删改array_splice()
是针对原数组直接操作的函数,所有操作都会影响到原来的数组
语法:array_splice(数组,开始位置,长度,要插入的数组[可选])
删除替换增加都是从开始位置参数开始设置
的
删除:开始位置不为 0,长度不为 0
替换:开始位置不为 0,长度为想要替换的个数,替换的数组
增加:长度为 0,当长度不为 0 时,先删除符合长度的数组成员再插入新成员
$arr = [1,2,3,4,5,6,7,8,9];
// 删除
print_r(array_splice($arr,2,3));
echo "<hr>";
print_r($arr);
echo "<hr>";
// 替换
$place = [888,999,1111];
print_r(array_splice($arr,2,3,[888,999,1111]));
echo "<hr>";
print_r($arr);
// 增加
$arr1 = [1,2,3,4,5];
echo "<hr>";
print_r(array_splice($arr1,2,0,$place));
echo "<hr>";
print_r($arr1);
extract()
:将关联数组拆分为变量
$config = ['type'=>'mysql','host'=>'localhost','dbname'=>'phpedu','charset'=>'utf=8'];
extract($config); //拆分成为普通变量
echo $type."<br>".$host."<br>".$dbname."<br>".$charset;
compact()
:将一组变量合并为关联数组
$name = "ggg";
$age = 19;
$gender = "male";
$res = compact('name','age','gender');
print_r($res);
栈与队列
栈于队列的特点:
LIFO(last in first out:后进先出)–栈这家伙的特点 ?
FIFO(fist in first out:先进先出)–队列这家伙的特点 ?
PHP 中 ,栈与队列是一种特殊的线性表,都是只能在一端操作:头部
、尾部
同时栈于队列还会提及一个“入栈/队”,“出栈/队”的操作。并且都是从一端进行的。
在头部:array_push()
是向尾部添加数据,array_pop()
是向尾部弹出数据
在尾部:array_unshift()
是向头部添加数据,array_shift()
是从头部弹出数据
首先我们来说一下队列的入队和出队的顺序:FIFOFirst Input First Outpu
就是先进来的数据先出队
其次来说一下队列之中出队和入队的方向。
队列必须设置入队和出队的顺序
在队列之中,可以通过搭配push/pop
和shift/unshift
来设置入队和出队的方向。
下面举个例子:
栈的顺序:LIFO
后入先出:
我们可以这样理解,栈的数据读取有两个操作:分别是存和取,但是如何判断哪些是先进来的数据哪些是后进来的数据,我们可以通过一个例子来说明:
对于存放数据:我们可以理解为存盘子【装菜的盘子】,先拿过来的是不是就会放在最底部,后拿过来的盘子是不是就放置最上面?
所以我们可以画出一张这样的草图:
这样一来是不是就很清楚了,分清楚顺序之后就可以用代码来举例子:
$arr = [1,2,3];
// 先来看下原数组
print_r($arr);
echo "<hr>";
// 栈的数据出入顺序:后进先出
// 添加数据: pop || push
array_push($arr,4);
array_push($arr,5,6,7);
print_r($arr);
echo "<hr>";
echo "后进来的数据是在最底部的,所以后进来的先出去:"."<br>";
echo "<hr>";
// 弹出数据
array_pop($arr);
print_r($arr);
echo "<hr>";
array_pop($arr);
print_r($arr);
echo "<hr>";
array_pop($arr);
print_r($arr);
echo "<hr>";
array_pop($arr);
print_r($arr);
echo "<hr>";
// 再来看另外一组函数实现栈于队列的入栈和出栈
// unshift || shift
$arr1 = ['a','b','c'];
print_r($arr1);
echo "<hr>";
// 添加数据:
echo "此时添加进来的数据是最后添加进来的,但是是在头部添加,所以c是最先进来的,因为是在最底层"."<br>";
array_unshift($arr1,'d');
print_r($arr1);
echo "<hr>";
array_unshift($arr1,'e','f','g');
print_r($arr1);
echo "<hr>";
// 弹出数据:
echo "最后进来的最先出去,所以,最后进来的是在最上面,于是弹出:"."<br>";
array_shift($arr1);
print_r($arr1);
echo "<hr>";
array_shift($arr1);
print_r($arr1);
echo "<hr>";
array_shift($arr1);
print_r($arr1);
echo "<hr>";
队列的顺序
由于队列是我们规定从那边进对,那边出队,所以我们可以把队列想象成为一个通道【地铁】
于是先进先出的顺序我们就好理解了。
可以通过举一个例子:汽车过隧道,我们是不是只能挨个进挨个出,必须按顺序来,所以最先进入隧道的汽车就最先出去。
再来看下面一幅图加深理解
于是我们就可以通过代码来判断那些数据是先进来的:
$arr = [1,2,3];
// 先来看下原数组
print_r($arr);
echo "<hr>";
// 队列的顺序:先进先出
// 1. 尾部进,头部出
// 添加数据:
echo "通过push向尾部添加数据"."<br>";
array_push($arr,4);
print_r($arr);
echo "<hr>";
array_push($arr,5,6,7);
print_r($arr);
echo "<hr>";
// 弹出数据:
echo "通过shift从头部弹出数据"."<br>";
array_shift($arr);
print_r($arr);
echo "<hr>";
array_shift($arr);
print_r($arr);
echo "<hr>";
array_shift($arr);
print_r($arr);
echo "<hr>";
// 2.头部进,尾部出
// unshift + pop
......
初入 PDO
PDO 是什么:(PHP Data Objects)是一种在 PHP 里连接数据库的使用接口。PDO 与 mysqli 曾经被建议用来取代原本 PHP 在用的 mysql 相关函数,基于数据库使用的安全性,因为后者欠缺对于 SQL 注入的防护。
PDO 三要素:DSN数据源
username
password
初入就不细说了,使用案例带过吧,后续会继续更新 PDO 相关文章的
服务端:
namespace pdo_edu;
return [
'type' => $type ?? 'mysql',
'host' => $host ?? 'localhost',
'dbname' => $dbname ?? 'lv',
'port' => $port ?? '3306',
'charset' => $charset ?? 'utf8',
'username' => $username ?? 'root',
'password' => $password ?? 'zhoujielun521'
];
拿取数据:
namespace pdo_edu;
$config = require __DIR__ . '/../config/database.php';
use PDO;
//PDO数据连接~三要素 DSN数据源 username password,
// extract()
$type = $config['type'];
$host = $config['host'];
$dbname = $config['dbname'];
$username = $config['username'];
$password = $config['password'];
$dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);
try {
$pdo = new PDO($dsn,$username ,$password);
// var_dump($pdo);
} catch(\Exception $e) {
die($e->getMessage());
}