Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Łączenie dwóch tablic
Forum PHP.pl > Forum > Przedszkole
arzach
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
Potter125
array_merge
arzach
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'];
thek
A to nie możesz zrobić łączenia i potem sortowania? Powinno to być szybsze niż łączenie tablic z jednoczesnym sortowaniem.
arzach
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.
thek
Widać kolega chyba nie umie używać sortowania... usort się kłania.
arzach
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);
thek
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.
arzach
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 ?
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.