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

时间:2012-03-30 20:49:09

标签: php database-design key-value

我正在开发一个具有多个应用的​​网络应用系统,每个应用都有一个用于识别它们的主键。每个用户还具有与应用程序绑定的安全级别,例如安全级别为5的App#1。我希望将所有应用程序/安全信息作为令牌存储在数据库中,然后检索该信息以将其存储在会话。

所以给出以下应用程序:

  1. 任务App
  2. 电子邮件应用
  3. Notes App
  4. 和分别具有安全级别3,5和7的用户,令牌将存储为:

    1.3|2.5|3.7.
    

    我的问题是,如何以可用的形式检索数据?我想在数组中使用App ID的数组键,如somearray[1] = 3somearray[2] = 5等,但我不知道如何处理它。

    我在这方面的发展很早,所以我对建议持开放态度。在此先感谢您的帮助。

4 个答案:

答案 0 :(得分: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的当前previlege id。

我认为这是管理此问题的最简单方法。

答案 1 :(得分: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);

答案 2 :(得分:0)

希望将这些东西存储为一个字符串(你不应该),你可以使用explode()再将它分开。

无论如何,更好的解决方案是properly normalize your databasestep-to-step guide for this)。

答案 3 :(得分:0)

爆炸

Item = explode('|',token);

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

Echo List, val