Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Porównywanie tablic
foxbond
post
Post #1





Grupa: Zarejestrowani
Postów: 162
Pomógł: 12
Dołączył: 20.12.2009
Skąd: Siedlce

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


  1. <?php
  2. $ar1 = array();
  3. $ar1[] = array("id"=>1, "nick"=>"zostal","log"=>"zostal"); //poprzedni gracze
  4. $ar1[] = array("id"=>2, "nick"=>"odszedl","log"=>"odszedl");
  5. $ar2 = array();
  6. $ar2[] = array("id"=>1, "nick"=>"zostal","log"=>"zostal"); //obecni gracze
  7. $ar2[] = array("id"=>3, "nick"=>"doszedl","log"=>"doszedl");
  8. $pozostali = array();
  9.  
  10. for ($i=0; $i<count($ar1); $i++){
  11. for($ii=0; $ii<count($ar2); $ii++){
  12. if ($ar1[$i]['id'] == $ar2[$ii]['id']){
  13. $pozostali[] = $ar2[$ii];
  14. }
  15. }
  16. }
  17. echo "\r\nOdeszli:";
  18. var_dump(array_diff($ar1, $ar2));//zla wartosc
  19.  
  20. echo "\r\nDoszli:";
  21. var_dump(array_diff($ar2, $ar1));//zla wartosc
  22.  
  23. echo "\r\nPozostali:";
  24. var_dump(array_intersect($ar1, $ar2));//zla wartosc
  25. echo "\r\n Lub:";
  26. var_dump($pozostali);//dobry wynik
  27. ?>



Potrzebuję pobrać elementy które:
*są w pierwszej tablicy ale nie ma ich w drugiej
*są w drugiej tablicy ale nie ma ich w pierwszej
*są w obu tablicach (to już mam)

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
irmidjusz
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


  1. $ar1 = array();
  2. $ar1[] = array("id"=>1, "nick"=>"zostal","log"=>"zostal"); //poprzedni gracze
  3. $ar1[] = array("id"=>2, "nick"=>"odszedl","log"=>"odszedl");
  4. $ar1[] = array("id"=>4, "nick"=>"odszedl2","log"=>"odszedl2");
  5. $ar1[] = array("id"=>6, "nick"=>"zostal2","log"=>"zostal2"); //poprzedni gracze
  6.  
  7. $ar2 = array();
  8. $ar2[] = array("id"=>1, "nick"=>"zostal","log"=>"zostal"); //obecni gracze
  9. $ar2[] = array("id"=>3, "nick"=>"doszedl","log"=>"doszedl");
  10. $ar2[] = array("id"=>5, "nick"=>"doszedl2","log"=>"doszedl2");
  11. $ar2[] = array("id"=>6, "nick"=>"zostal2","log"=>"zostal2"); //obecni gracze
  12. $ar2[] = array("id"=>9, "nick"=>"doszedl3","log"=>"doszed3");
  13.  
  14. //po pierwsze, zmień struktury danych, których używasz, co ogromnie ułatwi sprawę
  15. //algorytmy wymagają odpowiednich struktur danych, na których operują
  16. //również funkcje przyjmujące parametry działają poprawnie tylko,
  17. //jeśli owe parametry są w formacie wymaganym przez te funkcje (IMG:style_emoticons/default/tongue.gif)
  18.  
  19. $poprzedni = array();
  20. foreach($ar1 as $val){
  21. $poprzedni[] = $val['id'];
  22. }
  23.  
  24. $obecni = array();
  25. foreach($ar2 as $val){
  26. $obecni[] = $val['id'];
  27. }
  28.  
  29. //po drugie, RTFM i stosuj istniejące funkcje zgodnie z ich przeznaczeniem
  30.  
  31. $pozostali = array_intersect($poprzedni, $obecni);
  32. $odeszli = array_diff($poprzedni, $obecni);
  33. $doszli = array_diff($obecni, $poprzedni);
  34.  
  35. //w ten sposób otrzymujesz tablice z odpowiednimi ID rekordów
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 21:06