Помогите с циклом и foreach - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

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

#1 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 608
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 29 Май 2019 - 05:08

Здравствуйте. У меня на боте реализована система доступа к команде с помощью цикла, я уже реализовал добавление в админке 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;
	}
}


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

#2 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 608
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 29 Май 2019 - 07:14

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

	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;
	}

0

#3 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 806
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 486
  • IPB version:I have no IPB
 

Отправлено 29 Май 2019 - 07:49

Просмотреть сообщениеTemKa_SD сказал(а):

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

https://www.php.net/...ors.bitwise.php
0

#4 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 608
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 29 Май 2019 - 08:56

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

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

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

		return $return;
	}

0

#5 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 806
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 486
  • IPB version:I have no IPB
 

Отправлено 29 Май 2019 - 11:27

Вы до первого примера дошли?
Там есть двойка?
0

Сообщить об этой теме:


Страница 1 из 1
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2019 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна