nie działa mi in array

0

hejka tutaj macie kod
if ($config['function']['nick_protect']['status'] == true)
{

	foreach ($clients as $users)
	{
		$clientinfo = $tsAdmin->getElement('data', $tsAdmin->clientInfo($users['clid']));
		$groups = explode(',', $clientinfo['client_servergroups']);
		foreach($config['function']['nick_protect']['ignore_group'] as $groups_ignore)
		{
			if(!in_array($groups_ignore, $groups))
			{
				foreach ($config['function']['nick_protect']['block_nick'] as $nick_protect)
				{
					if(strpos(strtolower($users['client_nickname']),strtolower($nick_protect))!== false)
					{
						$tsAdmin->clientKick($users['clid'], 'server', 'Twoj nick zawiera niezgodne z regulaminem słowo.');
					}
				}
			}
		}
	}
}

i w skrócie nie działa mi sprawdzanie że jeżeli ktoś ma daną grupe to nie wyrzuca go, w sensie to sprawdzanie nie działa

wie ktoś może dlaczego ?

0
  1. FORMATOWANIE wybieraj tak by kolorowało składnie a nie tylko zaznaczało bo się wszystko zlewa.
  2. podepnij sobie xdebuga i testuj linka po linijce i patrz co siedzi w zmiennych.
0

Możesz zamknąć ten kod w funkcję?
Wydziel sobie kod do odpowiednich funkcji/metod i korzystaj z nich, to CI będzie łatwiej debugować.
Zobacz też, że masz sporo niepotrzebnych wcięć i ogólnie zagnieżdżenie w Twoim kodzie wskazuje, że jest spora szansa na właśnie takie błędy jak opisujesz - przykład optymalizacji?

if(in_array($groups_ignore, $groups)) {//
   return false;//lub inny oczekiwany wynik
}
foreach ($config['function']['nick_protect']['block_nick'] as $nick_protect)// a tu dalej lecisz z koksem i jak widać nie powoduje to dodatkowego wcięcia i ogólnie kod ładniejszy i czytelniejszy się robi.

Ogólnie to całość zamknąłbym w 3, no może 4 funkcjach, rzeczy takie jak $config['function']['nick_protect']['block_nick'] przekazywałbym jako parametry, później łatwiej będzie ten kod ogarniać.

0

ale chodzi bardziej o to że ten in_array źle działa po prostu jak by to powiedzieć nie pokazuje czy posiada tą grupe nie wiem czy ktoś mnie zrozumie.

0

a co masz w parametrach tego in_array? rzuć tu wynik

 var_dump($groups_ignore);
 var_dump($groups);
0

int(20)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "22"
}
int(22)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "22"
}
int(27)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "22"
}
int(26)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "22"
}
int(20)
array(1) {
[0]=>
string(1) "2"
}
int(22)
array(1) {
[0]=>
string(1) "2"
}
int(27)
array(1) {
[0]=>
string(1) "2"
}
int(26)
array(1) {
[0]=>
string(1) "2"
}
int(20)
array(6) {
[0]=>
string(1) "2"
[1]=>
string(2) "17"
[2]=>
string(2) "20"
[3]=>
string(2) "21"
[4]=>
string(2) "23"
[5]=>
string(2) "25"
}
int(22)
array(6) {
[0]=>
string(1) "2"
[1]=>
string(2) "17"
[2]=>
string(2) "20"
[3]=>
string(2) "21"
[4]=>
string(2) "23"
[5]=>
string(2) "25"
}
int(27)
array(6) {
[0]=>
string(1) "2"
[1]=>
string(2) "17"
[2]=>
string(2) "20"
[3]=>
string(2) "21"
[4]=>
string(2) "23"
[5]=>
string(2) "25"
}
int(26)
array(6) {
[0]=>
string(1) "2"
[1]=>
string(2) "17"
[2]=>
string(2) "20"
[3]=>
string(2) "21"
[4]=>
string(2) "23"
[5]=>
string(2) "25"
}
int(20)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "27"
}
int(22)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "27"
}
int(27)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "27"
}
int(26)
array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "27"
}
int(20)
array(1) {
[0]=>
string(2) "31"
}
int(22)
array(1) {
[0]=>
string(2) "31"
}
int(27)
array(1) {
[0]=>
string(2) "31"
}
int(26)
array(1) {
[0]=>
string(2) "31"
}

0

dla

int(20)

array(2) {
[0]=>
string(2) "21"
[1]=>
string(2) "22"
}

in_array() powinno zwrócić false (czyli !in_array() zwróci true)
pytanie skąd wiesz że to in_array() nie działa, może to coś w pozostałych instrukcjach nie działa?

0

ponieważ założenie tego jest takie że jeżeli osoba ma daną grupe to nie wyrzuca jej za zły nick a wiem że in_array działa źle bo wyrzuca nie ważne czy posiada grupe

0

ale sprawdzasz te $groups_ignore po jednej
czyli jak masz groups_ignore 20 i 22, a klient należy do 21 i 22 to najpierw sprawdzenie zwróci true, a dla następnego sprawdzenia false, czyli raz warunek i tak zostanie spełniony dla tego klienta

0

no tak że zwróci true i zostawi tego gracza i do następnego przechodzi i jak zwróci false to wyrzuca z nie odpowiednim nickiem

1 użytkowników online, w tym zalogowanych: 0, gości: 1