• 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...

Cloud VPS
0 głosów
334 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,700 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,700 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 1,094 wizyt
pytanie zadane 4 sierpnia 2015 w C i C++ przez gregorn97 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 413 wizyt
pytanie zadane 30 kwietnia 2022 w Python przez niezalogowany
0 głosów
1 odpowiedź 239 wizyt
pytanie zadane 18 kwietnia 2021 w Python przez Bunia Nowicjusz (160 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 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

Kursy INF.02 i INF.03
...