• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed pętle, pętle...

Object Storage Arubacloud
0 głosów
227 wizyt
pytanie zadane 7 sierpnia 2015 w PHP przez niezalogowany
zamknięte 8 sierpnia 2015
	foreach($groupList as $srow => $svalue) { // pętla dla każdego uzytkownika z wybranej grupy (Admin)
		$nick = $svalue['client_nickname'];	 // zapisywanie nicku

		foreach($userList as $row => $value) { // petla dla kazdego uzytkownika online
			$ClientDatabaseIDList[] = $value['client_database_id']; //dodawanie client database id do tablicy
			$cid = $value['cid'];	//pobieranie  client id
		
			if(in_array($svalue['cldbid'], $ClientDatabaseIDList)) { // jezeli gracz z grupy (Admin) jest online
				$status = "<font color='green'>Online";  // zapisywanie statusu
	
				$ch = ($tsAdmin->channelInfo($cid)['data']);  // pobieranie danych z kanału na ktorym jest dany uzytkownik

		}
			else{   // jesli gracz z grupy (Admin) nie jest online
				$status = "<font color='red'>Offline"; // zapisywanie statusu
				$channel =  "niedostępny"; // zapisywanie nazwy kanału jako niedostępny
				
			}
		}
			// wyświetlanie wszystkich informacji o danym graczu z grupy
		echo "   
		<tr>
		<td><p>". $nick ."<br /><small>Kanał: ".$channel."<br /></small></td>
		<td>". $status ."</td>
		</tr>";	

	}

 

kod online: http://pastebin.com/BnN3Rrpg

Pracuje nad API serwera i chce pobrać informacje o użytkownikach z grupy (Admin). Wszystko w powyższym kodzie działa, poza tym że jak zmienię kanał na serwerze, za kazdym razem $cid przybiera wartość = 1. Dzieje sie tak dlatego, że Informacje o uzytkowniku sa juz wyswietlana poza petla foreach($userList...) i wyswietla $cid juz calkiem innego uzytkownika.

Jak zamknę petle  foreach($userList...)  za wyswietleniem inforamcji, kazdy pojedynczy uzytkownik z grupy wyswietla się 3 razy i w kazdym z 3-ech przypadków ma przypisany inną nazwe kanału ($cid), którychś z nich zawsze jest poprawny.

Nie wiem czy to dobry pomysł tutaj pisać, ale warto spróbować =D

komentarz zamknięcia: pomoc udzielona

2 odpowiedzi

0 głosów
odpowiedź 7 sierpnia 2015 przez roque Bywalec (2,160 p.)
wybrane 8 sierpnia 2015
 
Najlepsza

Tak się dzieje ponieważ, jak już znajdziesz odpowiedniego użytkownika w pętli to z niej nie wychodzisz. Spróbuj tak jak napisałem niżej. Słowo kluczowe "continue;"


 
<?php
foreach($groupList as $srow => $svalue) { // pętla dla każdego uzytkownika z wybranej grupy (Admin)
    $nick = $svalue['client_nickname'];  // zapisywanie nicku
 
     $status = "<font color='red'>Offline</font>"; // zapisywanie statusu
     $channel =  "niedostępny"; // zapisywanie nazwy kanału jako niedostępny

    foreach($userList as $row => $value) { // petla dla kazdego uzytkownika online
        $ClientDatabaseIDList[] = $value['client_database_id']; //dodawanie client database id do tablicy
        $cid = $value['cid'];   //pobieranie  client id
     
        if(in_array($svalue['cldbid'], $ClientDatabaseIDList)) { // jezeli gracz z grupy (Admin) jest online
            $status = "<font color='green'>Online</font>";  // zapisywanie statusu
 
            $ch = ($tsAdmin->channelInfo($cid)['data']);  // pobieranie danych z kanału na ktorym jest dany uzytkownik
            continue;
       }
    }
        // wyświetlanie wszystkich informacji o danym graczu z grupy
    echo "  
   <tr>
   <td><p>". $nick ."<br /><small>Kanał: ".$channel."<br /></small></td>
   <td>". $status ."</td>
   </tr>";  
 
}

 

komentarz 7 sierpnia 2015 przez roque Bywalec (2,160 p.)

Nie wiem, czy to zadziała, bo napisałem to bez danych, ale spróbuj i zobaczymy ;-) To można jeszcze napisać tak:

<?php
foreach($groupList as $srow => $svalue) { // pętla dla każdego uzytkownika z wybranej grupy (Admin)
    $nick = $svalue['client_nickname'];  // zapisywanie nicku
  
     $status = "<font color='red'>Offline</font>"; // zapisywanie statusu
     $channel =  "niedostępny"; // zapisywanie nazwy kanału jako niedostępny
 
    foreach($userList as $row => $value) { // petla dla kazdego uzytkownika online
        $cid = $value['cid'];   //pobieranie  client id
      
        if($svalue['cldbid'] == $value['client_database_id']) { // jezeli gracz z grupy (Admin) jest online
            $status = "<font color='green'>Online</font>";  // zapisywanie statusu
  
            $ch = ($tsAdmin->channelInfo($cid)['data']);  // pobieranie danych z kanału na ktorym jest dany uzytkownik
            continue;
       }
    }
        // wyświetlanie wszystkich informacji o danym graczu z grupy
    echo "  
   <tr>
   <td><p>". $nick ."<br /><small>Kanał: ".$channel."<br /></small></td>
   <td>". $status ."</td>
   </tr>";  
  
}

 

komentarz 7 sierpnia 2015 przez roque Bywalec (2,160 p.)
aaaa, i jeszcze powinieneś chyba zmienic

$ch = ($tsAdmin->channelInfo($cid)['data']);

na

$channel = ($tsAdmin->channelInfo($cid)['data']);
komentarz 8 sierpnia 2015 przez niezalogowany

Patrze i niedowierzam surprise

Na początku myślałem, że to nie ma prawa bytu przez instrukcje continue, ale wrzuciłem i śmiga pięknie cool

Dziekki wielkie,bo sam nad tym myślałem już parę dni.. :f

komentarz 8 sierpnia 2015 przez roque Bywalec (2,160 p.)
Żaden problem ;-)
0 głosów
odpowiedź 7 sierpnia 2015 przez rafal.budzis Szeryf (85,260 p.)
Jakiś print_r z przykładowymi danymi z $groupList i $userList z którymi występuje problem ? :)

PS. ale zaśmieciłeś kod komentarzami :D i nie masz zamkniętego znacznika </font> ale pewnie kod spreparowany do wstawienia więc nic nie mówie.
komentarz 7 sierpnia 2015 przez niezalogowany
$groupList =  $tsAdmin->serverGroupClientList(2);
$userList = $tsAdmin->clientList("-uid -times");

Dokumentacja funkcji clientList - >http://ts3admin.info/manual/classes/ts3admin.html#method_clientList

i serverGroupClientList -> http://ts3admin.info/manual/classes/ts3admin.html#method_serverGroupClientList

i wkorzystuje tez ChannelInfo() (http://ts3admin.info/manual/classes/ts3admin.html#method_channelInfo) do pobierania nazwy kanału.

faktycznie, zaśmieciłem troche ale starałem się zeby było mniej więcej zrozumiałe :G

 

komentarz 8 sierpnia 2015 przez rafal.budzis Szeryf (85,260 p.)
A jesteś pewny ze cid i cldbid to to samo ?

nie lepiej po client_unique_identifier robić ?

Zrób w skrypcie print_r z tych dwoch zmiennych daj na PW czy gdzieś wtedy bede mógło potestować wszystko bez integrowania się z API

Podobne pytania

–1 głos
3 odpowiedzi 715 wizyt
pytanie zadane 4 sierpnia 2015 w C i C++ przez gregorn97 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 236 wizyt
pytanie zadane 30 kwietnia 2022 w Python przez niezalogowany
0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 18 kwietnia 2021 w Python przez Bunia Nowicjusz (160 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...