Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzenie czy user jest online z tablicy
Forum PHP.pl > Forum > PHP
konradmm
Witam ponownie!

Problem dosc specyficzny...

Posiadam arrayka $online, ktory listuje wszystkich uzytkownikow online w tablicy o wygladzie:

Kod
array(30) {
      ["id_klienta"]=>
      int(104)
      ["poziom"]=>
      int(58)
      ["id_klienta_w_bazie"]=>
      int(307)
      ["nick"]=>
      object(XXX)#6034 (2) {
        ["string":protected]=>
        string(5) "se7en"
        ["position":protected]=>
        int(0)
      }
      ["admin"]=>
      int(1)
      ["afk"]=>


oraz mam rowniez sprawdzenie KTO jest adminem, ktore to zapytanie zwraca tablice tego typu:

Kod
array(2) {
  [307]=>
  array(3) {
    ["id_klienta_w_bazie"]=>
    int(307)
    ["nick"]=>
    object(XXX)#6355 (2) {
      ["string":protected]=>
      string(5) "se7en"
      ["position":protected]=>
      int(0)
    }
    ["secretkey"]=>
    object(XXX)#6356 (2) {
      ["string":protected]=>
      string(28) "1234567890987654321"
      ["position":protected]=>
      int(0)
    }
  }
  [7771]=>
  array(3) {
    ["id_klienta_w_bazie"]=>
    int(7771)
    ["nick"]=>
    object(XXX)#6439 (2) {
      ["string":protected]=>
      string(13) "RoLL1n 罗林"
      ["position":protected]=>
      int(0)
    }
    ["secretkey"]=>
    object(XXX)#6440 (2) {
      ["string":protected]=>
      string(28) "098745632123456789"
      ["position":protected]=>
      int(0)
    }


I moje pytanie brzmi jak moge sprawdzic KTO z adminow jest aktualnie online?
Co mam tak naprawde porownac?

Czy moge uzyc czegos w stylu?:
Kod
$online = $gra->ListaOnline();
foreach($gra->Admins() as $admin_member) {
//do tego etapu dziala wszystko
    if (isset($online[$admin_member['id_klienta']]))


Sczerze, nie wiem jak to zrobic i nie mam juz sil biggrin.gif
Prosze o pomoc wink.gif


Poniekąd rozwiązałem swój problem, ale ostatnio ktos mnie glupio nauczyl, ze mam sprawdzac jak szybko kod działa itp...

  1. $online = $gra->ListaOnline();
  2. foreach($gra->Admins() as $admin_member) {
  3. foreach($online as $xonline){
  4. $znalazlem = false;
  5.  
  6. if($xonline['id_klienta_w_bazie'] == $admin_member['id_klienta_w_bazie']){
  7. $znalazlem = true;
  8. break;
  9. }
  10. else
  11. $znalazlem = false;
  12. }
  13. if($znalazlem)
  14. echo $admin_member['nick']."-Online\n";
  15. else
  16. echo $admin_member['nick']."-Offline\n";
  17. }


Pytanie teraz, jak bardzo nieefektywne jest to pakowac w 2 petle?
I jak to inaczej rozwiazac?
salfunglandyare
Widzę, że tablicę adminów masz w postaci
  1. array(
  2. [ID_ADMINA] => arrray(3) ....
  3. )


Możesz to chyba zrobić tak:
  1. $online = $gra->ListaOnline();
  2. $admins = $gra->Admins();
  3. foreach($online as $xonline) {
  4. if(isset($admins[$xonline['id_klienta_w_bazie']])){
  5. $admins[$xonline['id_klienta_w_bazie']]['online']=true;
  6. }
  7. }
  8. foreach($admins as $admin_member){
  9. echo $admin_member['nick'].(($admin_member['online'] === true)?"-Online\n":"-Offline\n");
  10. }

Też masz 2 pętle, ale po każdej idziesz tylko raz

//EDIT

Gdybyś miał (a nie wiem, jak masz, bo tego nie widać) $online w postaci $online[ID_W_BAZIE] => array(...) to mógłbyś zamknąć się w jednej pętli:
  1. $online = $gra->ListaOnline();
  2. foreach($gra->Admins() as $admin_member){
  3. if(isset($online[$admin_member['id_klienta_w_bazie']])){
  4. echo $admin_member['nick']."-Online\n";
  5. } else {
  6. echo $admin_member['nick']."-Offline\n";
  7. }
  8. }

memory
  1. var_dump(array_filter($online, function($k) {
  2. return $k['admin'] === 1;
  3. }));
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.