Porównanie zmiennych ze sobą

0

Cześć, napotkałem mały problem podczas porównywania do siebie zmiennych. Wyciągam z bazy danych zmienną $aktywne_grupy, która nie zawsze jest taka sama (będzie się różnić w zależności jakie użytkownik posiada rangi) i potrzebuję przefiltrować id, które znajdują się w tej zmiennej, tak aby potem uzyskać id ikony do wyświetlenia na stronie.

Dając przykład mojego konta zmienna $aktywne_grupy = 7,11,15,16,100,184,335,358,384,394,471,480,481,482,505,519,525

przy wykonywaniu if(strstr($aktywne_grupy, $idGrupy)), gdy np. $idGrupy = 8 zostają wyświetlone wszystkie rangi, które posiadają id = 8, nawet że $aktywne_grupy nie mają tej grupy, ale zostaje wyświetlone przez to, że 8 znajduje się np. w 184, 358, 480 itd.

$aktywne_grupy = $rowUser["PosiadaneGrupy"];
$idGrupy = $rowGrupy["GrupaID"];
$idIkony = $rowGrupy["IconID"];
$format_ikony = $rowGrupy["Format"];
$nazwa_ikony = $rowGrupy["Inazwa"];

if(strstr($aktywne_grupy, $idGrupy))
{
	if($idIkony != 0 && $idIkony != 300 && $idIkony != 500 && $idIkony != 3030330213)
		{
			echo '<img src="adres_url://ikony/'.$idIkony.'.'.$format_ikony.'" title="'.$nazwa_ikony.'">';
		}
}

4

Najlepiej przekonwertuj sobie ten string z rangami do tablicy przy uzyciu explode. Mając już tablicę szukasz w niej wystąpienia przez in_array.
W ogóle to najlepiej jakbyś od razu z bazy te rangi pobierał jako tablica a nie jako string.

Sposób alternatywny, nie zalecany, to zamiast szukać jednej cyferki, szukaj wystąpienia cyfry wraz z przecinkami. Czyli zamiast szukać $id_grupy szukaj ",".$id_grupy.","

0

Wiele różnych rzeczy wczoraj próbowałem, zanim dodałem posta explode też używałem, ale może niewłaściwe.

$grupy_filtr = explode(',', $aktywne_grupy);
if(in_array($grupy_filtr, $idGrupy ) 
{
 	if($idIkony != 0 && $idIkony != 300 && $idIkony != 500 && $idIkony != 3030330213)
		{
			echo '<img src="adres_url://ikony/'.$idIkony.'.'.$format_ikony.'" title="'.$nazwa_ikony.'">';
		}
}

I w tym przypadku:
$aktywne_grupy = 7,11,15,16,100,184,335,358,384,394,471,480,481,482,505,519,525
zmienia się w:
$aktywne_grupy = ( [0] => 7 [1] => 11 [2] => 15 [3] => 16 [4] => 100 [5] => 184 [6] => 335 [7] => 358 [8] => 384 [9] => 394 [10] => 471 [11] => 480 [12] => 481 [13] => 482 [14] => 505 [15] => 519 [16] => 525 )

I jak to porównać z tym stringiem, który pobrałem z bazy danych np. Ranga o id = 7, tak żeby pokazało rangę tylko 7, a nie wszystkie rangi, które mają w sobie 7 (nawet jeśli ich na ma w $aktywne_grupy)

$idGrupy = 7

3

Trochę miszasz z nazewnictwem zmiennych ale pisane na szybko i na podstawie Twojego nazewnictwa. Zamieniłeś argumenty miejscami w in_array().

<?php
$aktywne_grupy = '7,11,15,16,100,184,335,358,384,394,471,480,481,482,505,519,525';
$groups = explode(',', $aktywne_grupy);

function isInActiveGroups(string $groupId, array $groups): void
{
    if(in_array($groupId, $groups))
    {
 	    echo $groupId . " jest aktywna". PHP_EOL;
    }
    else 
    {
        echo $groupId . " nie jest aktywna". PHP_EOL;
    }
}

isInActiveGroups('7', $groups); //7 jest aktywna
isInActiveGroups('5', $groups); //5 nie jest aktywna
isInActiveGroups('52', $groups); //52 nie jest aktywna
isInActiveGroups('525', $groups); //525 jest aktywna
0

Dzięki wielkie za pomoc, widzę gdzie zrobiłem błąd if(in_array($grupy_filtr, $idGrupy ) a powinno być if(in_array($idGrupy, $grupy_filtr) myślałem, że w in_array nie ma znaczenia co damy pierwsze.

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