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


PHP - How to parse string information into usable form from database

我正在开发一个web应用程序系统,该系统有多个应用程序,每个应用程序都有一个主键来识别它们。每个用户也有一个与应用程序相关的安全级别,例如安全级别为5的应用程序#1。我想将所有应用程序/安全信息作为令牌存储在数据库中,然后检索该信息以将其存储在Session中。

因此,给定以下应用程序:

  1. 任务应用程序
  2. 电子邮件应用程序
  3. Notes应用程序

以及安全级别分别为3、5和7的用户,令牌将存储为:

1.3|2.5|3.7.

我的问题是,如何以可用的形式检索这些数据?我想把它放在一个数组中,用应用程序ID的数组键,比如somearray[1] = 3somearray[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