PHP - Как разобрать строковую информацию в пригодную для использования форму из базы данных - PullRequest
3 голосов
/ 31 марта 2012

Я работаю над системой веб-приложений, в которой есть несколько приложений, каждое из которых имеет первичный ключ для их идентификации.У каждого пользователя также есть уровень безопасности, привязанный к приложению, например, к приложению № 1 с уровнем безопасности 5. Я хочу сохранить всю информацию о приложении / безопасности в базе данных в виде токена, а затем получить эту информацию, чтобы сохранить ее вСеанс.

Итак, с учетом следующих приложений:

  1. Приложение задач
  2. Приложение электронной почты
  3. Приложение Notes

и пользователь с уровнем безопасности 3, 5 и 7, соответственно, токен будет сохранен как:

1.3|2.5|3.7.

Мой вопрос: как мне получить эти данные в пригодной для использования форме?Я думал о том, чтобы иметь его в массиве с ключом массива идентификатора приложения, например somearray[1] = 3, somearray[2] = 5 и т. Д., Но я понятия не имею, как с этим справиться.

Я ранов разработке в этой части, поэтому я очень открыт для предложений.Заранее спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 31 марта 2012

токен будет сохранен как:

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

Этот запрос затем возвращает текущий идентификатор превалирования для данного идентификатора приложения и идентификатора пользователя.

Я думаю, это был бы самый простой способ справиться с этим.

2 голосов
/ 31 марта 2012

Вы должны действительно перепроектировать свою базу данных, как предложено Пьер-Оливье Буржуа .

Если вы хотите придерживаться описанного формата, вы можете использовать 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 голосов
/ 31 марта 2012

Explode

Item = explode('|',token);

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

Echo List, val
0 голосов
/ 31 марта 2012

вы, вы действительно хотите сохранить эти вещи как одну строку (вы не должны), вы можете использовать explode () , чтобы снова разобрать их.

в любом случае, гораздо лучшим решением было бы правильно нормализовать вашу базу данных ( пошаговое руководство по этому ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...