Сложная сортировка массива PHP

D
На сайте с 28.06.2008
Offline
1114
280

Может быть вам она и не покажется сложной, но я не могу придумать как это сделать.

Есть большой массив такого вида

array(110) {
  [0]=>
  array(40) {
    ["number1"]=>
    string(1) "1"
    ["nic1"]=>
    string(11) "LuckyStr1ke"
    ["country1"]=>
    string(90) "UA"
    ["score1"]=>
    string(6) "825.00"
    ["fscore1"]=>
    string(0) ""
    ["prize1"]=>
    string(7) "C$2,000"
    ["diff1"]=>
    int(0)
    ["diff21"]=>
    string(1) "-"
    ["arrow1"]=>
    string(0) ""
    ["progress_points1"]=>
    float(825)
    ["number2"]=>
    string(1) "1"
    ["nic2"]=>
    string(6) "Borat!"
    ["country2"]=>
    string(90) "KZ"
    ["score2"]=>
    string(6) "692.00"
    ["fscore2"]=>
    string(0) ""
    ["prize2"]=>
    string(5) "C$960"
    ["diff2"]=>
    int(0)
    ["diff22"]=>
    string(1) "-"
    ["arrow2"]=>
    string(0) ""
    ["progress_points2"]=>
    float(692)
    ["number3"]=>
    string(1) "1"
    ["nic3"]=>
    string(12) "Ollofmeister"
    ["country3"]=>
    string(90) "PL.png"
    ["score3"]=>
    string(6) "390.00"
    ["fscore3"]=>
    string(0) ""
    ["prize3"]=>
    string(5) "C$448"
    ["diff3"]=>
    int(0)
    ["diff23"]=>
    string(1) "-"
    ["arrow3"]=>
    string(0) ""
    ["progress_points3"]=>
    float(390)
    ["number4"]=>
    string(1) "1"
    ["nic4"]=>
    string(10) "Nakkovalen"
    ["country4"]=>
    string(90) "<img src="BY.png"
    ["score4"]=>
    string(6) "890.00"
    ["fscore4"]=>
    string(0) ""
    ["prize4"]=>
    string(5) "C$256"
    ["diff4"]=>
    int(4)
    ["diff24"]=>
    string(1) "-"
    ["arrow4"]=>
    string(0) ""
    ["progress_points4"]=>
    float(896)
  }
  [1]=>
  array(40) {
    ["number1"]=>
    string(1) "2"
    ["nic1"]=>
    string(6) "Borat!"
    ["country1"]=>
    string(90) "KZ.png"
    ["score1"]=>
    string(6) "739.00"
    ["fscore1"]=>
    string(0) ""
    ["prize1"]=>
    string(7) "C$1,650"
    ["diff1"]=>
    int(0)
    ["diff21"]=>
    string(1) "-"
    ["arrow1"]=>
    string(0) ""
    ["progress_points1"]=>
    float(739)
    ["number2"]=>
    string(1) "2"
    ["nic2"]=>
    string(10) "WantedDead"
    ["country2"]=>
    string(90) "AT"
    ["score2"]=>
    string(6) "653.00"
    ["fscore2"]=>
    string(0) ""
    ["prize2"]=>
    string(5) "C$800"
    ["diff2"]=>
    int(0)
    ["diff22"]=>
    string(1) "-"
    ["arrow2"]=>
    string(0) ""
    ["progress_points2"]=>
    float(653)
    ["number3"]=>
    string(1) "2"
    ["nic3"]=>
    string(8) "Vatacut1"
    ["country3"]=>
    string(90) "PL.png"
    ["score3"]=>
    string(6) "351.00"
    ["fscore3"]=>
    string(0) ""
    ["prize3"]=>
    string(5) "C$320"
    ["diff3"]=>
    int(0)
    ["diff23"]=>
    string(1) "-"
    ["arrow3"]=>
    string(0) ""
    ["progress_points3"]=>
    float(351)
    ["number4"]=>
    string(1) "2"
    ["nic4"]=>
    string(9) "docent533"
    ["country4"]=>
    string(90) "RU.png"
    ["score4"]=>
    string(6) "557.00"
    ["fscore4"]=>
    string(0) ""
    ["prize4"]=>
    string(5) "C$224"
    ["diff4"]=>
    int(24)
    ["diff24"]=>
    string(1) "-"
    ["arrow4"]=>
    string(0) ""
    ["progress_points4"]=>
    float(590)
  }
  [2]=>
  array(40) {
          ............

т.е. в каждом подмассиве данные по 4 игрокам. Теперь мне нужно отсортировать по убыванию по ключу progress_points* в пределах одного сета игроков.

Один сет - это игроки имеющие одинаковую цифру в конце ключа массива (от 1 до 4).

т. е. чтобы получилось нечто подобное, в ["number*"] писать место в рейтинге начиная с 1 и вниз

array {
  [0]=>
  array {
  ["number1"]=>1,
  ["nic1"]=>  "LuckyStr1ke",
  ["progress_points1"]=> 825
  }
  [1]=> 
  array {  
  ["number1"]=>2,
  ["nic1"]=>  "Borat!",
  ["progress_points1"]=> 739
  }
  [2]=> 
  array {  
  ["number1"]=>3,
  ["nic1"]=>  "kunirider",
  ["progress_points1"]=> 689
  }
...........

в результате нужно 4 массива (или функцию делающую это на лету) сортирующую игроков по ключу progress_points* (где * номер сета от 1 до 4) по убыванию

fliger
На сайте с 17.09.2015
Offline
113
#1

Использование array_column (создается массив для сортировки по ключу progress_points) и напоследок array_multisort, в котором используется созданный массив, дает нужный результат.

https://www.php.net/manual/ru/function.array-column.php

https://www.php.net/manual/ru/function.array-multisort.php

P.S. Если нужно уже готовое решение (если сам не бум-бум), то к специалистам.

D
На сайте с 28.06.2008
Offline
1114
#2
fliger #:
array_column

Спс получилось!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий