php 变量与key匹配,laravel - php变量解析 - key

本文探讨了框架或模板引擎中数组解析表达式的内部原理,如如何通过递归和预编译技术高效、安全地访问和修改数组元素。通过实例剖析了PHP的getValue函数,揭示了如何利用Redis的key-value操作,以及如何结合不同数据结构如哈希表。
摘要由CSDN通过智能技术生成

58e8d81c4a0d115f2a9f9f245fa77d87.png

...>

对value操作的命令

exists(key):确认一个key是否存在

del(key):删除一个key

type(key):返回值的类型

keys(pattern):返回满足给定pattern的所有key

randomkey:随机返回key空间的一个...

比如现在我有变量 $arr, 他是一个数组

$arr = [

'news' => [

'data' => [

0 => [

'title' => '名字',

'content' => '内容'

],

],

],

];

一些框架或模板引擎 都带了解析的功能, 可以通过 arr.news.data[0].title 的方式, 获取到 title 的值, 以及可以对值进行修改。

那么我想知道他是什么原理, 如何 高效、安全、简单 的使用此种表达方式对数组中的值进行获取以及设置呢?

我能想到的是利用文本处理的方式实现的, 不过安全性、效率上应该不算很高。请老师指点。

回复内容:

比如现在我有变量 $arr, 他是一个数组

$arr = [

'news' => [

'data' => [

0 => [

'title' => '名字',

'content' => '内容'

],

],

],

];

一些框架或模板引擎 都带了解析的功能, 可以通过 arr.news.data[0].title 的方式, 获取到 title 的值, 以及可以对值进行修改。

那么我想知道他是什么原理, 如何 高效、安全、简单 的使用此种表达方式对数组中的值进行获取以及设置呢?

我能想到的是利用文本处理的方式实现的, 不过安全性、效率上应该不算很高。请老师指点。

绝大多数模板引擎都是使用预编译的方式处理的,即输入的模板数据,会将其中变量、循环、条件等符号,转换成标准的PHP语句,之后再执行这些内容。

另外,这些框架或者模板引擎都是开源的,你有时间在这里问人,自己去看看代码早就明白了。

我给你找个代码好吧。

public static function getValue($array, $key, $default = null)

{

if ($key instanceof \Closure) {

return $key($array, $default);

}

if (is_array($key)) {

$lastKey = array_pop($key);

foreach ($key as $keyPart) {

$array = static::getValue($array, $keyPart);

}

$key = $lastKey;

}

if (is_array($array) && (isset($array[$key]) || array_key_exists($key, $array)) ) {

return $array[$key];

}

if (($pos = strrpos($key, '.')) !== false) {

$array = static::getValue($array, substr($key, 0, $pos), $default);

$key = substr($key, $pos + 1);

}

if (is_object($array)) {

// this is expected to fail if the property does not exist, or __get() is not implemented

// it is not reliably possible to check whether a property is accessable beforehand

return $array->$key;

} elseif (is_array($array)) {

return (isset($array[$key]) || array_key_exists($key, $array)) ? $array[$key] : $default;

} else {

return $default;

}

}

...>

对value操作的命令

exists(key):确认一个key是否存在

del(key):删除一个key

type(key):返回值的类型

keys(pattern):返回满足给定pattern的所有key

randomkey:随机返回key空间的一个...

...dis->ping(); //检查是否还再链接,[+pong]$redis->ttl('key');//查看失效时间[-1 | timestamps]$redis->persist('key');//移除失效时间[ 1 | 0]$redis-&

先说redisredis是一个类似memcached的key/value存储系统,它支持存储的value类型相对较多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保...

##常用结构及命令:

keys * #查询所有key

randomkey  #随机返回key

type key  #返回key的类型

exists ...

先说redisredis是一个类似memcached的key/value存储系统,它支持存储的value类型相对较多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保...

...,不会被其他命令插入。高并发下不存在竞态条件。

KEY的命名:一个良好的建议是article:1:title来存储ID为1的文章的标题。

一、前言。

1、获取key的列表:KEYS pattern 通配符有?*[]和转义\

2、key是否存在:

...Hash表的功能。PHP可以模拟实现Hash表的增删改查。通过对key的映射到数组中的一个位置来访问。映射函数叫做Hash函数,存放记录的数组称为Hash表。

Hash函数把任意长度的和类型的key转换成固定长度输出。不同的key可能拥有相同的...

...redis->ping(); //检查是否还再链接,[+pong]

$redis->ttl('key');//查看失效时间[-1 | timestamps]

$redis->persist('key');//移除失效时间[ 1 | 0]

...g:redis:article中的值(tag是redis的文章ID),来组合成一个新的key就是article:(ag:redis:article中的一个值):time。获取到tag是redis的文章ID列表,然后根据他们的发布时间来排序。

Redis SORT命令还有个GET参数,GE

...e="code"> 员工姓名 职级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值