Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Łączenie dwóch tablic
arzach
post
Post #1





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

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


Witam mam takie dwie tablice
  1. $array[] = Array('druzyna_name' => 'Polonia Warszawa', 'punkty' => 10);
  2. $array[] = Array('druzyna_name' => 'Jagiellonia Białystok', 'punkty' => 10);
  3. $array[] = Array('druzyna_name' => 'Wisła Kraków', 'punkty' => 9);
  4. $array[] = Array('druzyna_name' => 'Korona Kielce', 'punkty' => 7);
  5.  
  6. $array_direct_matches[] = Array('druzyna_name' => 'Zagłębie Lubin', 'punkty' => 10, 'LM' => 1, 'PktB' => 3, 'RB' => 1)
  7. $array_direct_matches[] = Array ('druzyna_name' => 'Arka Gdynia', 'punkty' => 10, 'LM' => 1, 'PktB' => 0, 'RB' => -1);
  8. $array_direct_matches[] = Array('druzyna_name' => 'Cracovia', 'punkty' => 10, 'LM' => 1, 'PktB' => 3, 'RB' => 1)
  9. $array_direct_matches[] = Array ('druzyna_name' => 'Polonia Bytom', 'punkty' => 10, 'LM' => 1, 'PktB' => 0, 'RB' => -1);



I chce tablice $array_direct_matches wstawić na koniec punktów tak by sie zgadzały punkty wynik jaki chce uzyskać

  1. $array[] = Array('druzyna_name' => 'Polonia Warszawa', 'punkty' => 10);
  2. $array[] = Array('druzyna_name' => 'Jagiellonia Białystok', 'punkty' => 10);
  3. // tutaj wstawic na koniec
  4. $array[] = Array('druzyna_name' => 'Zagłębie Lubin', 'punkty' => 10, 'LM' => 1, 'PktB' => 3, 'RB' => 1)
  5. $array[] = Array ('druzyna_name' => 'Arka Gdynia', 'punkty' => 10, 'LM' => 1, 'PktB' => 0, 'RB' => -1);
  6. $array[] = Array('druzyna_name' => 'Wisła Kraków', 'punkty' => 9);
  7. //tutaj wstawic na koniec
  8. $array[] = Array('druzyna_name' => 'Cracovia', 'punkty' => 9, 'LM' => 1, 'PktB' => 3, 'RB' => 1)
  9. $array[] = Array ('druzyna_name' => 'Polonia Bytom', 'punkty' => 9, 'LM' => 1, 'PktB' => 0, 'RB' => -1);
  10. $array[] = Array('druzyna_name' => 'Korona Kielce', 'punkty' => 7);


Obecnie napisałem coś takiego
  1. foreach($array AS $kay => $value){
  2.  
  3. if(isset($new_table[$kay]['punkty']) && isset($new_table[$kay-1]['punkty'])){
  4.  
  5.  
  6. if($new_table[$kay]['punkty'] !== $new_table[$kay-1]['punkty']){
  7.  
  8. // sprawdźmy czy poprzedni element jest równy bieżącemu jeśli
  9. //nie sprawdzamy czy poprzedni element istniej w tablicy
  10. //$array_direct_matches jeśli tak wstawiamy na koniec
  11.  
  12. }
  13. }
  14. }


I dalej nie wiem jak mam to wstawić proszę o pomoc
Go to the top of the page
+Quote Post
Potter125
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 7
Dołączył: 18.02.2007

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


array_merge
Go to the top of the page
+Quote Post
arzach
post
Post #3





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

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


Cytat(Potter125 @ 2.08.2011, 14:29:21 ) *


Co mi po array_merge jak to mi wstawi drugą tablice na koniec pierwszej. Ja potrzebuje wstawić część z drugiej tablicy do pierwszej na koniec punktów tak by
  1. $array[$klucz]['punkty'] == $array_direct_matches[$klucz1]['punkty'];


Ten post edytował arzach 2.08.2011, 13:36:59
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A to nie możesz zrobić łączenia i potem sortowania? Powinno to być szybsze niż łączenie tablic z jednoczesnym sortowaniem.
Go to the top of the page
+Quote Post
arzach
post
Post #5





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

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


Gdybym tak mógł to bym zrobił ale tak się nie da posortować dla tego dla tego tablica pierwsza jest już posortowana za od razu z bazy danych i tablica druga też jest posortowana za pomocą array_multisort dla tego potrzebuje wstawić do pierwszej tablicy drugą dokładnie tak jak jest na sam koniec punktów tak by się punkty zgadzały.

Ten post edytował arzach 2.08.2011, 14:02:32
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Widać kolega chyba nie umie używać sortowania... usort się kłania.
Go to the top of the page
+Quote Post
arzach
post
Post #7





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

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


Chyba nie rozumiesz o co mi chodzi.

Z bazy danych pobieram dane na temat drużyny liczbę punktów bramki zdobyte bramki stracone i po tym sortuje. W bazie danych nie jestem w stanie policzyć czy drożyny które mają tą samą liczbę pkt gramy miedzy sobą mecze.

Dla tego z bazy danych ładuje wszystko do tablicy szukam drużyn które mają tą samą liczbę pkt. Potem grupuje tablice z druzami po punktach i tutaj sprawdzam czy drużny gramy między sobą mecz jeśli tak usuwam te drożyny z tablicy głównej i liczę dla nich pkt w meczach bezpośrednich i potem tablice z meczami drożyn bezpośrednich sortuję

i na koniec tak posortowaną tablice muszę wstawić na koniec punktów tak by się pkt zgadzały

Dobra załóżmy mam taką tablice
  1. $array[] = Array('druzyna_name' => 'Polonia Warszawa', 'punkty' => 10, 'RB' => 6, 'BZ' => 3);
  2. $array[] = Array('druzyna_name' => 'Korona Kielce', 'punkty' => 7, 'RB' => 6, 'BZ' => 3);
  3. $array[] = Array('druzyna_name' => 'Jagiellonia Białystok', 'punkty' => 10, 'RB' => 4, 'BZ' => 3);
  4. $array[] = Array('druzyna_name' => 'Wisła Kraków', 'punkty' => 9, 'RB' => 4, 'BZ' => 3);
  5. $array[] = Array('druzyna_name' => 'Zagłębie Lubin', 'punkty' => 10, 'RB' => 5, 'BZ' => 3 'LM' => 1, 'PktB' => 3, 'RBB' => 1)
  6. $array[] = Array('druzyna_name' => 'Arka Gdynia', 'punkty' => 10, 'RB' => 2, 'BZ' => 3 'LM' => 1, 'PktB' => 0, 'RBB' => -1);
  7. $array[] = Array('druzyna_name' => 'Cracovia', 'punkty' => 9, 'RB' => 1, 'BZ' => 5 'LM' => 1, 'PktB' => 3, 'RBB' => 1)
  8. $array[] = Array('druzyna_name' => 'Polonia Bytom', 'punkty' => 9, 'RB' => -5, 'BZ' => 2 'LM' => 1, 'PktB' => 0, 'RBB' => -1);


I czy za pomocą usort jestem w stanie posortować tak tablice

gdy punkty są te same sortowało po punkty DESC, RB DESC, BZ DESC A gdy pkt są te same i KLUCZ PktB istnieje
to po
punkty DESC, RB DESC, BZ DESC, PktB DESC RBB DESC ale tak by ci co mają PktB byli na końcu
czyli by wyszło coś takiego
  1. $array[] = Array('druzyna_name' => 'Polonia Warszawa', 'punkty' => 10);
  2. $array[] = Array('druzyna_name' => 'Jagiellonia Białystok', 'punkty' => 10);
  3. $array[] = Array('druzyna_name' => 'Zagłębie Lubin', 'punkty' => 10, 'LM' => 1, 'PktB' => 3, 'RB' => 1)
  4. $array[] = Array ('druzyna_name' => 'Arka Gdynia', 'punkty' => 10, 'LM' => 1, 'PktB' => 0, 'RB' => -1);
  5. $array[] = Array('druzyna_name' => 'Wisła Kraków', 'punkty' => 9);
  6. $array[] = Array('druzyna_name' => 'Cracovia', 'punkty' => 9, 'LM' => 1, 'PktB' => 3, 'RB' => 1)
  7. $array[] = Array ('druzyna_name' => 'Polonia Bytom', 'punkty' => 9, 'LM' => 1, 'PktB' => 0, 'RB' => -1);
  8. $array[] = Array('druzyna_name' => 'Korona Kielce', 'punkty' => 7);


Ten post edytował arzach 2.08.2011, 14:37:23
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To teraz spójrz na swój kod, w tablicę $array_direct_matches i powiedz mi może dlaczego 'Cracovia' i 'Polonia Bytom' mają zamiast 10 tylko 9 punktów, bo poza tym nie widzę problemu z posortowaniem po punktach zdefiniowaną przez usera funkcją. I to skąd są dane oraz jakie nie jest żadnym problemem. To "tylko" kwestia napisania funkcji sortującej z głową.

EDIT: I ilość kryteriów nie ma tu znaczenia. To Ci załatwią odpowiednie IF w samej funkcji, a z kolei PktB załatwi isset. Dlatego napisałem, że funkcja sorująca musi być napisana "z głową", by Ci się do kryteriów dopasowała.
Powód edycji: [thek]: Po dopisku usera :)
Go to the top of the page
+Quote Post
arzach
post
Post #9





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

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


Cytat(thek @ 2.08.2011, 15:33:44 ) *
To teraz spójrz na swój kod, w tablicę $array_direct_matches i powiedz mi może dlaczego 'Cracovia' i 'Polonia Bytom' mają zamiast 10 tylko 9 punktów z głową.


Bo się pomyliłem tą tablice napisałem tylko dla zobrazowania o co mi chodzi cały kod wygląda tak

Nie ogarniam tej funkcji usort

czy ktoś pomoże mi ktoś z tym ?

Mam taki kod
  1. $array[] = Array('P' => 4, 'R' => 3);
  2. $array[] = Array('P' => 2, 'R' => 3);
  3. $array[] = Array('P' => 10, 'R' => 4);
  4. $array[] = Array('P' => 10, 'R' => 4);
  5. $array[] = Array('P' => 10, 'R' => 4);
  6. $array[] = Array('P' => 10, 'R' => 3);
  7.  
  8.  
  9.  
  10.  
  11. function mysort($a, $b) {
  12.  
  13. if($a['P'] < $b['P'] && $a['R'] < $b['R']){
  14.  
  15. return 1;
  16.  
  17. } elseif($a['P'] == $b['P'] && $a['R'] == $b['R']) {
  18.  
  19. return 0;
  20. } else {
  21. return -1;
  22. }
  23. }
  24.  
  25. usort ($array, 'mysort');


Pomoże mi ktoś napisać funkcje by posortowała tablice najpierw P malejąco a potem R mającego ?

Ten post edytował arzach 2.08.2011, 18:19:47
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 - 14:20