数组处理函数和 POD 初入

数组处理函数

  • 键名相关处理函数
    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()是从头部弹出数据

首先我们来说一下队列的入队和出队的顺序:FIFO
First Input First Outpu就是先进来的数据先出队
其次来说一下队列之中出队和入队的方向。
队列必须设置入队和出队的顺序
在队列之中,可以通过搭配push/popshift/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
......

栈于队列的理解:通过博文:https://www.cnblogs.com/ithuangqing/p/12113586.html
加深了理解

初入 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());
}
最后修改:2020 年 11 月 26 日 07 : 15 PM
如果觉得我的文章对你有用,请随意赞赏