Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Porównanie dwóch tablic, Pomoc w napisaniu funkcji porównującej dwie tablice
arzach
post
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Witam mam taki kod
  1. $aktualna_kolejka[] = array('druzyna_name' => 'Polonia Warszawa');
  2. $aktualna_kolejka[] = array('druzyna_name' => 'Jagiellonia Bialystok');
  3. $aktualna_kolejka[] = array('druzyna_name' => 'GKS Belchatow');
  4. $aktualna_kolejka[] = array('druzyna_name' => 'Wisla Krakow');
  5.  
  6.  
  7. $poprzednia_kolejka[] = array('druzyna_name' => 'Polonia Warszawa');
  8. $poprzednia_kolejka[] = array('druzyna_name' => 'Jagiellonia Bialystok');
  9. $poprzednia_kolejka[] = array('druzyna_name' => 'Wisla Krakow');
  10. $poprzednia_kolejka[] = array('druzyna_name' => 'GKS Belchatow');
  11.  
  12.  
  13. function comparison_array(array $array, $druzyna_name){
  14.  
  15. foreach($array as $key => $value){
  16. if($druzyna_name == $value['druzyna_name']){
  17.  
  18. return 'bez zmian';
  19.  
  20. } elseif($druzyna_name > $value['druzyna_name']){
  21. return 'awans';
  22. } else {
  23. return 'spadek';
  24. }
  25. }
  26.  
  27. }
  28.  
  29.  
  30. // wyświetlanie wyników
  31. foreach($aktualna_kolejka AS $value){
  32. echo comparison_array($poprzednia_kolejka, $value['druzyna_name'])." | ".$value['druzyna_name'].'</br>';
  33. // bez zmian | Polonia Warszawa
  34. // bez zmian | Jagiellonia Bialystok
  35. // awans | GKS Belchatow
  36. // spadek | Wisla Krakow
  37. }


Oczywiście kod ten nie działa i potrzebuje pomoc w napisaniu funkcji która porówna $aktualna_kolejka z tablicą $poprzednia_kolejka tak by funkcja zwracała

- bez zmian gdy drużyna w tablicy $aktualna_kolejka jest na tej same pozycji co w $poprzednia_kolejka
- awans gdy drużyna w tablicy $aktualna_kolejka jest wyżej niż w tablicy $poprzednia_kolejka
- spadek gdy drużyna w tablicy $aktualna_kolejka jest niżej niż w tablicy $poprzednia_kolejka

Proszę o pomoc w napisaniu tego w jak najprostszy sposób. Sprawa się komplikuje dla mnie ponieważ klucze w tablicach są indeksowane numerycznie zamiast nazwy drużyn.

Ten post edytował arzach 30.07.2011, 20:23:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
arzach
post
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Nie mogę zmienić tablicy na jedno wymiarową ponieważ potrzebuje Tablice wielowymiarowe bo w tablicy oprócz nazwy drużyny są jeszcze informacje o zdobytych punktach bramkach itp
  1. $aktualna_kolejka[] = array('druzyna_name' => 'Polonia Warszawa', 'punkty' => 9);
  2. $aktualna_kolejka[] = array('druzyna_name' => 'Jagiellonia Bialystok', 'punkty' => 9);
  3. $aktualna_kolejka[] = array('druzyna_name' => 'GKS Belchatow', 'punkty' => 7);
  4. $aktualna_kolejka[] = array('druzyna_name' => 'Wisla Krakow', 'punkty' => 5);


Cytat(lobopol @ 30.07.2011, 21:15:55 ) *
  1. function comparison_array($array_new, $array_old, $druzyna_name){
  2.  
  3. foreach($array_old as $key => $value){
  4. if($drużyna_name == $value){
  5. $position_old = $key;
  6. }
  7. }
  8.  
  9. foreach($array_new as $key => $value){
  10. if($drużyna_name == $value){
  11. $position_new = $key;
  12. }
  13. }
  14. if($position_new == $position_old)
  15. return 'same';
  16. } //reszte dopisz sobie sam


Można by to nieco wydajniej zrobić, ale nie mam teraz weny do kombinowania


To co podałeś można zrobić jedną pętlą w funkcji tylko nie wiem jak. Do funkcji wystarczy przekazać jako argument $poprzednia_kolejka, $druzyna_name po co dwie tablice ?

Chodzi mi o coś takiego
  1. // wyświetlanie wyników
  2. foreach($aktualna_kolejka AS $value){
  3. echo comparison_array($poprzednia_kolejka, $value['druzyna_name'])." | ".$value['druzyna_name'].'</br>';
  4. // bez zmian | Polonia Warszawa
  5. // bez zmian | Jagiellonia Bialystok
  6. // awans | GKS Belchatow
  7. // spadek | Wisla Krakow
  8. }
  9.  




Pomoże ktoś jak można napisać najprościej taką funkcje ?

Ten post edytował arzach 30.07.2011, 20:34:23
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 13:08