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

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

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...