PHP - 如何将数据库中的字符串信息解析为可用形式

3
我正在开发一个具有多个应用程序的Web应用系统,每个应用程序都具有用于标识它们的主键。每个用户还与一个应用程序关联了安全级别,例如安全级别为5的应用程序#1。我希望将所有应用程序/安全信息存储在数据库中作为令牌,然后检索该信息以将其存储在会话中。
因此,鉴于以下应用程序:
1. 任务应用 2. 邮件应用 3. 备忘录应用
对于安全级别分别为3、5和7的用户,令牌将被存储为:
1.3|2.5|3.7.

我的问题是,如何以可用的形式检索这些数据?我考虑将它们放入一个数组中,并使用应用程序ID作为数组键,例如somearray[1] = 3somearray[2] = 5等,但我不知道该如何处理它。
目前我在开发的过程中,非常乐意听取建议。感谢您提前的帮助。
4个回答

3

令牌将被存储为:

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。

我认为这是最简单的管理方式。


这个想法是字符串只需要一个查询和一个返回,最大限度地减少数据库工作,并将负担转移到PHP上。用户可能会有数百个应用程序,那么app_users_permissions方法仍然更好吗? - kxhawkins
1
是的,数据库服务器被设计来处理这么多的数据。解析字符串将导致性能缓慢,并且它被设计用于存储您想要做的数据。我仍然认为使用数据库是处理这个问题的最佳方法。 - Pierre-Olivier

2

建议你按照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);

0

0

分解

Item = explode('|',token);

List(key,val) = explode('.',Item);

Echo List, val

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接