Porównanie zmiennych ze sobą

Porównanie zmiennych ze sobą
ZeuberO
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 43
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.

Kopiuj
$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.'">';
		}
}

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
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.","

ZeuberO
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 43
0

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

Kopiuj
$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

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
3

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

Kopiuj
<?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
ZeuberO
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 43
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.