PHP-сортировать индексированный массив по значениям другого массива - PullRequest
0 голосов
/ 22 апреля 2019

По сути, я хочу отсортировать массив на основе другого массива.

Как и в случае,

<?php
$movies=array("Avengers","Spiderman","Batman","Flash");
$ratings=array(9,3,4,7,);
?>

Другими словами, $movies[0] ("Мстители") имеет рейтинги9, $movies[1] («Человек-паук») имеет рейтинг 3 и т. д.

Я хочу, чтобы массив рейтингов сортировался по номерам в порядке убывания и, таким образом, сортировал массив фильмов.понравится это, чтобы быть в функции.Таким образом, массив будет таким:

<?php
$movies=array("Spiderman","Batman","Flash","Avengers",);
$ratings=array(3,4,7,9);
?>

Массив ratings был отсортирован, и, следовательно, массив movies также был отсортирован, но в соответствии с массивом ratings.

Мне жаль, что я новичок в php, и я знаю, что сделать это, вероятно, очень просто, но я не знаю, как это сделать. Единственный способ, которым я могу думать, это использовать вставку в таблицу SQL, а затем выбрать из нее впо убыванию, но это, вероятно, будет очень плохой идеей .....

Любая помощь очень ценится.Заранее спасибо.

О, и если это легче сделать в Laravel (я использую laravel), пожалуйста, покажите мне, как

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Вы можете использовать array_combine () для объединения названий и рейтингов фильмов.

Таким образом, имена фильмов будут ключами результирующего массива, а оценки - значениями.

Теперь сортируйте, используя arsort () , чтобы новый массив сортировался в порядке убывания по рейтингу, сохраняя названия фильмов такими, как они есть.

Распечатайте массив.

Код:

<?php
$movies=array("Spiderman","Batman","Flash","Avengers",);
$ratings=array(3,4,7,9);
$movieRatings = array_combine($movies, $ratings);
arsort($movieRatings);
echo '<pre>';print_r($movieRatings);
?>

Выход:

Array
(
    [Avengers] => 9
    [Flash] => 7
    [Batman] => 4
    [Spiderman] => 3
)
1 голос
/ 22 апреля 2019

попробуйте это,

array_combine ( array $keys , array $values ) : array

это работает, устанавливая значения в одном массиве как ключи другого массива, который в вашем случае является вашими фильмами.

<?php
$movies=array("Avengers","Spiderman","Batman","Flash");
$ratings=array(9,3,4,7,);

$result = array_combine ( $movies, $ratings);

// then sort this way...

arsort($result, 0);
?>

документация для обеих функцийздесь ...

https://www.php.net/manual/en/function.array-combine.php

https://www.w3schools.com/php/func_array_arsort.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...