Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablica -> sortowanie -> wyciąganie najczęstszych wartości
Forum PHP.pl > Forum > Przedszkole
kafowi
Witam.
Pobieram dane około 200 liczb i zapisuje je do tablicy.

Następnie sprawdzam wystąpienia przy użyciu array_count_values
print_r(array_count_values($elements));
Wynik wygląda mniej-więcej tak:

Kod
    [7 ] => 3
    [8 ] => 4
    [14 ] => 3
    [18 ] => 5
    [21 ] => 3
    [27 ] => 5
    [28 ] => 1
    [32 ] => 3
    [34 ] => 4
    [41 ] => 6
    [46 ] => 2
    [47 ] => 4
    [49 ] => 4
    [50 ] => 4
    [53 ] => 5
    [56 ] => 5
    [57 ] => 4
    [59 ] => 2
    [60 ] => 3
    [67 ] => 5
    [9 ] => 3

Teraz potrzebowałbym po tym zabiegu posortować po liczbie wystąpień (od największej do najmniejszej).
W tym przypadku:

Kod
    [41 ] => 6
    [18 ] => 5
    [27 ] => 5
    [53 ] => 5
    [56 ] => 5
    [67 ] => 5
    [8 ] => 4
[.........]

Próbowałem połączyć
print_r(array_count_values($elements)); z sort($elements, SORT_NUMERIC);
ale za głupi na to jestem. Jakiś pomysł?
Pyton_000
pokaż kod.
Ogólnie wynik z jednej operacji przypisujesz do zmiennej i wrzucasz do sort, i w wyniku dostaniesz odpowiedź.
kafowi
Przepraszam za kłopot. Poszukałem w manualu i cudo: arsort.


Odkopuje, zmieniły się założenia -.-"

Dane wyjściowe:
Kod
Array
(
    [0] => 6
    [1] => 14
    [2] => 15
    [3] => 19
    [4] => 26
    [5] => 31
    [6] => 34
    [7] => 41
    [8] => 42
    [9] => 43
    [10] => 44
    [11] => 46
    [12] => 49
    [13] => 50
    [14] => 54
    [15] => 56
    [16] => 61
    [17] => 62
    [18] => 68
    [19] => 69
    [20] => 6
    [21] => 16
    [22] => 17
    [23] => 22
    [24] => 25
    [25] => 26
    [26] => 28
    [27] => 30
    [28] => 34
    [29] => 36
    [30] => 40
    [31] => 41
    [32] => 43
    [33] => 47
    [34] => 48
    [35] => 49
    [36] => 56
    [37] => 63
    [38] => 64
    [39] => 65
    [40] => 1
    [41] => 6
    [42] => 11
    [43] => 18
    [44] => 20
    [45] => 33
    [46] => 34
    [47] => 35
    [48] => 37
    [49] => 40
    [50] => 45
    [51] => 46
    [52] => 48
    [53] => 52
    [54] => 53
    [55] => 56
    [56] => 61
    [57] => 62
    [58] => 64
    [59] => 69
    [60] => 4
    [61] => 10
    [62] => 12
    [63] => 13
    [64] => 18
    [65] => 19
    [66] => 23
    [67] => 25
    [68] => 26
    [69] => 27
    [70] => 29
    [71] => 33
    [72] => 34
    [73] => 50
    [74] => 56
    [75] => 57
    [76] => 58
    [77] => 61
    [78] => 63
    [79] => 67
    [80] => 1
    [81] => 4
    [82] => 6
    [83] => 7
    [84] => 9
    [85] => 13
    [86] => 14
    [87] => 35
    [88] => 38
    [89] => 45
    [90] => 46
    [91] => 48
    [92] => 50
    [93] => 52
    [94] => 55
    [95] => 56
    [96] => 59
    [97] => 65
    [98] => 66
    [99] => 69
    [100] => 1
    [101] => 4
    [102] => 7
    [103] => 8
    [104] => 9
    [105] => 11
    [106] => 14
    [107] => 18
    [108] => 19
    [109] => 20
    [110] => 23
    [111] => 32
    [112] => 33
    [113] => 36
    [114] => 46
    [115] => 51
    [116] => 52
    [117] => 53
    [118] => 55
    [119] => 57
    [120] => 3
    [121] => 4
    [122] => 5
    [123] => 6
    [124] => 7
    [125] => 10
    [126] => 12
    [127] => 19
    [128] => 25
    [129] => 31
    [130] => 34
    [131] => 44
    [132] => 45
    [133] => 47
    [134] => 53
    [135] => 56
    [136] => 59
    [137] => 63
    [138] => 68
    [139] => 70
    [140] => 1
    [141] => 6
    [142] => 7
    [143] => 11
    [144] => 18
    [145] => 19
    [146] => 21
    [147] => 27
    [148] => 28
    [149] => 29
    [150] => 32
    [151] => 34
    [152] => 43
    [153] => 44
    [154] => 45
    [155] => 46
    [156] => 47
    [157] => 51
    [158] => 58
    [159] => 64
    [160] => 12
    [161] => 16
    [162] => 21
    [163] => 23
    [164] => 24
    [165] => 26
    [166] => 27
    [167] => 30
    [168] => 31
    [169] => 35
    [170] => 38
    [171] => 40
    [172] => 41
    [173] => 45
    [174] => 47
    [175] => 51
    [176] => 53
    [177] => 55
    [178] => 56
    [179] => 64
    [180] => 2
    [181] => 7
    [182] => 12
    [183] => 17
    [184] => 19
    [185] => 24
    [186] => 25
    [187] => 30
    [188] => 33
    [189] => 35
    [190] => 38
    [191] => 47
    [192] => 51
    [193] => 54
    [194] => 55
    [195] => 57
    [196] => 61
    [197] => 66
    [198] => 68
    [199] => 69
)

Każda wartość w tablicy jest w przedziale od 1-70. Potrzebowałbym wyświetlić liczby z tego przedziału, które w w/w danych wyjściowych nie wystąpiły.
Próbowałem zrobić dodatkową tablicę, wypełnić ją liczbami od 1-70 i porównać z array_diff ale ewidentnie źle się za to zabrałem i brakuje mi pomysłu jak to ugryźć.
nospor
1) Petla for od 1 do 70
2) Sprawdzenie czy liczba z petli jest w tablicy - in_array()

Tada. Zadnej filozofii tu nie ma.
Damonsson
Z ciekawości, jak użyłeś (wklej kod) array_diff, że Ci nie zadziałało?
trueblue
  1. array_diff(range(1,70),$array)
kafowi
Tak coś czułem, że za dużo kombinowałem, dzięki śliczne.
Cytat(trueblue @ 5.10.2015, 18:04:03 ) *
  1. array_diff(range(1,70),$array)

@Damonsson - dokładnie tak jak przykład powyżej, z tą różnicą, że zamiast range(1,70) zrobiłem dodatkową tablicę, gdzie przy użyciu pętli wpakowałem 70 liczb.
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.