@RizyaRU

Как отсортировать или пересобрать многомерный массив по значению?

Имеем массив примерно такого вида:
array(3) {
  [0]=>
  array(3) {
    ["id"]=>
    string(1) "3"
    ["name"]=>
    string(10) "Алёна"
    ["rating"]=>
    string(4) "2159"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(9) "199978927"
    ["name"]=>
    string(12) "Wandermensil"
    ["rating"]=>
    string(4) "6593"
  }
  [2]=>
  array(3) {
    ["id"]=>
    string(9) "199983283"
    ["name"]=>
    string(8) "Mirfshir"
    ["rating"]=>
    string(4) "6320"
  }
}


Я пытаюсь отсортировать родительские массивы по значению rating
Чтоб на выходе было
array(3) {
   [0]=>
   array(3) {
    ["id"]=>
    string(9) "199978927"
    ["name"]=>
    string(12) "Wandermensil"
    ["rating"]=>
    string(4) "6593"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(9) "199983283"
    ["name"]=>
    string(8) "Mirfshir"
    ["rating"]=>
    string(4) "6320"
  }
  [2]=>
  array(3) {
    ["id"]=>
    string(1) "3"
    ["name"]=>
    string(10) "Алёна"
    ["rating"]=>
    string(4) "2159"
  }
}


Казалось бы решение на поверхности, но у меня никак не получается добиться результата, даже велосипед построить не могу без 5 лишних колес

Если учесть то, что этот массив, а точнее полная его реализация, уже собирается в цикле, подскажите пожалуйста возможное решение?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 2
t-alexashka
@t-alexashka
Сразу пишу legacy код
<?php

$arr = [
	['id' => 1, 'rating' => 2],
	['id' => 2, 'rating' => 4],
	['id' => 3, 'rating' => 1],
];

function sortByRating($a, $b) {
    return $b['rating'] - $a['rating'];
}

usort($arr, 'sortByRating');

print_r($arr);
Ответ написан
sergiks
@sergiks Куратор тега PHP
♬♬
Начиная с PHP 7.4 удобно использовать стрелочные функции:
$input = [
    ["id" => "3", "name" => "Алёна", "rating" => "2159", ],
    ["id" => "199978927", "name" => "Wandermensil", "rating" => "6593", ],
    ["id" => "199983283", "name" => "Mirfshir", "rating" => "6320", ],
];

usort($input, fn($a, $b) => $b["rating"] - $a["rating"]);
/*
array(3) {
    [0]=> array(3) { ["id"]=> string(9) "199978927" ["name"]=> string(12) "Wandermensil" ["rating"]=> string(4) "6593" }
    [1]=> array(3) { ["id"]=> string(9) "199983283" ["name"]=> string(8) "Mirfshir" ["rating"]=> string(4) "6320" }
    [2]=> array(3) { ["id"]=> string(1) "3" ["name"]=> string(10) "Алёна" ["rating"]=> string(4) "2159" }
} 
*/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы