我正在开发一个web应用程序系统,该系统有多个应用程序,每个应用程序都有一个主键来识别它们。每个用户也有一个与应用程序相关的安全级别,例如安全级别为5的应用程序#1。我想将所有应用程序/安全信息作为令牌存储在数据库中,然后检索该信息以将其存储在Session中。
因此,给定以下应用程序:
- 任务应用程序
- 电子邮件应用程序
- Notes应用程序
以及安全级别分别为3、5和7的用户,令牌将存储为:
1.3|2.5|3.7.
我的问题是,如何以可用的形式检索这些数据?我想把它放在一个数组中,用应用程序ID的数组键,比如somearray[1] = 3
、somearray[2] = 5
等,但我不知道如何处理。
我在这方面处于早期发展阶段,所以我对建议持开放态度。提前感谢您的帮助。
令牌将存储为:
1.3 | 2.5 | 3.7.
为什么不将安全级别存储在数据库中?它将更容易管理。我可以想象很少有这样的表格:
App
--------
id
name
....
Users
--------
id
name
email
...
App_users_permissions
--------
id
app_id (references App.id)
user_id (references Users.id)
level
然后,你可以做一个简单的查询,比如:
SELECT level FROM App_users_permissions WHERE user_id = 1 AND app_id = 2
然后,此查询将返回给定应用程序id和用户id的当前先前id。
我认为这将是最简单的管理方法。
您应该按照Pierre Olivier Bourgeois的建议重新设计数据库。
如果你想坚持所描述的格式,你可以使用preg_match_all()
:
$subject = '1.3|2.5|3.7.';
$pattern = '=('d+)'.('d+)=';
$result = preg_match_all($pattern, $subject, $subpattern, PREG_SET_ORDER);
foreach ($subpattern as $match) {
$out[$match[1]] = $match[2];
}
print_r($out);
如果真的想将这些东西存储为一个字符串(不应该),可以使用explode()将其再次拆开。
无论如何,更好的解决方案是正确地规范化数据库(这方面的分步指南)。
分解
Item = explode('|',token);
List(key,val) = explode('.',Item);
Echo List, val