Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Помогите с циклом и 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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.