Всем привет! Проблема решена, работает правильно, но почему оно так работает, я не понял. Есть многомерный древовидный массив по типу: Код (Text): array(100) { [0]=> array(11) { ["id"]=>int(9304058) ["from_id"]=>int(-26406986) ["text"]=>string(3082) "много буков блаблабла" ["attachments"]=> array(2) { [0]=> array(2) { ["type"]=>string(5) "photo" ["photo"]=> array(15) { ["id"]=>int(456264469) ["album_id"]=>int(45435469) ................. другие ID ............. } } } ["comments"]=> array(1) { ["count"]=>int(479) } ["likes"]=> array(1) { ["count"]=>int(469) } ["reposts"]=> array(1) { ["count"]=>int(21) } } Как видите, массив состоит из 100 элементов первого уровня, внутри идут массивы различных уровней вложенности. Называем массив $posts Его нужно отсортировать по полю $posts['likes']['count']. Написал такой код: Код (Text): foreach ($posts as $key => $post) { $like[$key] = $post['likes']['count']; } array_multisort($like, SORT_DESC, $posts); Всё работает правильно, но не пойму почему, ведь в функции переменная $posts и $like никак не связаны. Просто на вход функции поступает отсортированный одномерный массив(его имя не совпадает с именем поля в $posts) и сам $posts. В документации только пара слов написана и всё, толком ничего. А если заменить Код (Text): $post['likes']['count']; на Код (Text): $post['comments']['count']; , то сортирует по количеству комментариев. Откуда функция array_multisort знает, что имеено по likes, а не comments сортировать? Просто сравнением? А если эти поля будут совпадать, кроме одного значения, функция будет правильно работать?
Как бы вкратце и понятно объяснить.Не важно связаны эти массивы или нет.Сортировка происходит всегда по первому массиву.Если в первом массиве есть повторяющиеся элементы,то они сортируются уже следующим массивом и так далее... PHP: $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2); Отсюда и такие результаты: Код (Text): array(4) { [0]=> int(0) [1]=> int(10) [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(4) [1]=> int(1) [2]=> int(2) [3]=> int(3) } Более подробно: https://www.w3schools.com/php/func_array_multisort.asp http://phpclub.ru/manrus/f/array-multisort.html
PHP: $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); в этих массивах нет одинаковых значений. Почему 4 выходит на первое место во втором массиве после сортировки? Если по возрастанию. то она должна быть последней..
PHP: $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); 4 выходит на первое место,потому что в первом массиве на первое место выходит 0.По возрастанию сортируются одинаковые значения.Одинаковые значения есть в первом массиве.Соответственно они сортируются уже по второму массиву.