Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

Помогите с циклом и foreach

Рекомендованные сообщения

Здравствуйте. У меня на боте реализована система доступа к команде с помощью цикла, я уже реализовал добавление в админке IPS, мне нужно сделать функцию, которая определяет к каким командам выставлен доступ.

 

Начнем с C++, немного расскажу как оно работает там.

 

Каждая переменная с командой имеет свой ID: http://prntscr.com/nupb8s

 

Функция проверки доступа к команде:

 

bool CMDCheck (uint32_t cmd, uint32_t acc)
{
uint32_t Mask = 1;

if (cmd != 0)
	for (unsigned int k=1;k<=cmd;k++)
		Mask = Mask * 2;
if (acc & Mask)
	return true;
else
	return false;
}

 

Я вывел данные чтобы посмотреть что приходит в них: http://prntscr.com/nupbqo http://prntscr.com/nupbv3

 

CMD - ID команды.

ACC - доступ админа выставленный в базе данных.

MASK - это ID умноженный на 2.

 

----------------------------------

 

Мне нужно вычислить из ACC к каким именно командам есть доступ.

 

	$commands = array(
		'1' => 'wc3_admins_cmd_abort',
		'2' => 'wc3_admins_cmd_ban',
		'4' => 'wc3_admins_cmd_autostart',
		'8' => 'wc3_admins_cmd_banlast',
		'16' => 'wc3_admins_cmd_check',
		'32' => 'wc3_admins_cmd_checkban',
		'64' => 'wc3_admins_cmd_clearhcl',
		'128' => 'wc3_admins_cmd_close',
		'256' => 'wc3_admins_cmd_closeall',
		'512' => 'wc3_admins_cmd_download',
		'1024' => 'wc3_admins_cmd_drop',
		'2048' => 'wc3_admins_cmd_end',
		'4096' => 'wc3_admins_cmd_fakeplayer',
		'8192' => 'wc3_admins_cmd_fppause',
		'16384' => 'wc3_admins_cmd_from'
	);

 

Т.е что-то вроде такого мне нужно:

 

foreach ( $this->commands() as $key => $value ) {
if ($key == 128) {
	$test[] = $value;
}
}

 

Где 128 это ACC, здесь оно работает так как выбрана одна команда, если несколько, например 1 и 128 = 129

 

foreach ( $this->commands() as $key => $value ) {
if ($key == 129) {
	$test[] = $value;
}
}

 

так уже не определяет к какой команде есть доступ, я так понимаю здесь нужен еще цикл, верно?

Поделиться сообщением


Ссылка на сообщение

Вроде работает, что скажите?

 

public function checkAccess( $access )
{
	$return = array();
	$Mask = 1;

	for ($k=1;$k<=\count($this->commands());$k++)
		$Mask = $access * 2;

	foreach ( $this->commands() as $key => $value ) {
		if ( $key * 2 & $Mask )
			$return[] = $value;
	}

	return $return;
}

Поделиться сообщением


Ссылка на сообщение

Спасибо, переделал.

 

public function checkAccess( $access )
{
	$return = array();
	$commands = $this->commands();

	foreach ( $commands as $key => $value ) {
	    $return[] = $key * 2 & $access;
	}

	return $return;
}

Поделиться сообщением


Ссылка на сообщение

Вы до первого примера дошли?

Там есть двойка?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...