PHP Сортировка трех буквенных символов в произвольном порядке - PullRequest
2 голосов
/ 10 марта 2019

Я пытаюсь отсортировать группы из трех символов, таких как LMH, MMH, HHL и т. Д., Все из которых содержат только символы L, M и H, но мне нужно, чтобы они были отсортированы в порядке LMH. Это то, что я имею, но не знаю, как их сравнить. Массив $ val не работает при наличии повторяющихся символов. Это строка, которая разбивается на массив функцией.

function sortit($str) {
 $val = ['L' => 0, 'M' => 1, 'H' => 2];
 $parts = str_split($str);
 foreach ($parts as $value) {
   $order[$val[$value]] = $value;
 }
 ksort($order);
 return implode('',$parts);
 }

Введите:

MLH 
HLL 
MHM 
LHM 
MLH 
LHM 
MHL

Желаемый вывод:

LMH 
LLH 
MMH 
LMH 
LMH 
LMH 
LMH

Ответы [ 2 ]

3 голосов
/ 10 марта 2019

Использовать usort документ :

function sortit($str) {
   $val = ['L' => 0, 'M' => 1, 'H' => 2];
   $parts = str_split($str);
   usort($parts, function ($a, $b) use ($val) {return $val[$a] - $val[$b];});
   return implode("", $parts);
 }

Использовать как:

echo sortit("MLH"); // output LMH 
1 голос
/ 10 марта 2019
$val = ['L' => 0, 'M' => 1, 'H' => 2];
$strings = ['HML', 'MHM', 'LHL'];

foreach ($strings as $str) {
    $arr = str_split($str);
    usort($arr, function($val1, $val2) use ($val) {
        return $val[$val1] <=> $val[$val2];
    });
    var_dump(implode('', $arr));
}

Вы можете отсортировать его с помощью usort и пользовательской функции сравнения.Здесь я использовал ваш массив val, который был хорошей первой идеей.

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