ilkz
Новичок
Запутался в собственной структуре хранения данных
Делаю систему распределения прав между пользователями. Хранение данных о пользователях решил выполнить в виде массива вида:
---users---+---user1---+---flag1---value1
| |
| +---flagN---valueN
|
+---userN---+---flag1---value
|
+---flagN---valueN
Соответственно, доступ к конкретному флагу конкретного доступа должен быть осуществлен в виде:
$users['userN']['flagN']
Формирование массива реализуется одним из методов класса, приведенного ниже. Вроде бы все правильно. Однако обработку получившегося массива приходится выполнять с помощью трех циклов foreach(). Вот отсюда я и перестаю понимать - почему? Ведь, по идее, достаточно такой конструкции:
Собственно, класс:
Пример Базы Данных, которая парсится:
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Паша:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Малой:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Шурик:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Митяй:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Гуест:test:[email protected]
Делаю систему распределения прав между пользователями. Хранение данных о пользователях решил выполнить в виде массива вида:
---users---+---user1---+---flag1---value1
| |
| +---flagN---valueN
|
+---userN---+---flag1---value
|
+---flagN---valueN
Соответственно, доступ к конкретному флагу конкретного доступа должен быть осуществлен в виде:
$users['userN']['flagN']
Формирование массива реализуется одним из методов класса, приведенного ниже. Вроде бы все правильно. Однако обработку получившегося массива приходится выполнять с помощью трех циклов foreach(). Вот отсюда я и перестаю понимать - почему? Ведь, по идее, достаточно такой конструкции:
PHP:
foreach($users as $user)
{
foreach($user as $flag=>$value)
{/*обработка флагов*/}
}
PHP:
class TUsers
{
var $users; //структура хранения данных
function PrintUsers() //печать структуры пользователей
{
foreach($this->users as $user)
{
foreach($user as $k=>$v)
{
echo '<b>User: </b><font color="green">'.$k."</font><br>\n";
foreach($v as $q=>$w)
{
echo ' <font color="red">'.$q.'</font> => <font color="blue">'.$w.'</font><br>';
}
echo "<br>\n";
}
}
}
function LoadDB($dbfile) //загрузка Базы Данных пользователей
{
if(!file_exists($dbfile)) return false; //БД не найдена => выходим с false
$f=file($dbfile);
$this->users=array();
foreach($f as $fs)
{
trim($fs); //обрезаем паразитные пробелы
list($ACC_TYPE,$AUTH_FLAG,$PERMISSIONS,$LOGIN,$PASSWORD,$EMAIL)=explode(':',$fs);
$user=array($LOGIN => array('ACC_TYPE'=>$ACC_TYPE, //тип аккаунта
/* логин */ 'AUTH_FLAG'=>$AUTH_FLAG, //флаг авторизации
'PERMISSIONS'=>$PERMISSIONS, //права доступа
'PASSWORD'=>$PASSWORD, //пароль
'EMAIL'=>$EMAIL)); //e-mail
array_push($this->users,$user); //создаем структуру
}
//раскомментировать для вывода количества пользователей
//echo '<b>Loaded users: </b>'.count($this->users)."<br>\n";
return true; //все ОК => выходим с true
}
}
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Паша:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Малой:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Шурик:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Митяй:test:[email protected]
1:1:n(w)|a(x,x,x)|p(x,x)|f(x,x):Гуест:test:[email protected]