Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzenie czy user jest online z tablicy, poprzez porownanie z inna tablica
konradmm
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 18.12.2007

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/biggrin.gif)
Prosze o pomoc (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
salfunglandyare
post
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


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



Ten post edytował salfunglandyare 5.05.2015, 12:33:27
Go to the top of the page
+Quote Post
memory
post
Post #3





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

Ostrzeżenie: (0%)
-----


  1. var_dump(array_filter($online, function($k) {
  2. return $k['admin'] === 1;
  3. }));


Ten post edytował memory 5.05.2015, 12:43:35
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 21:30