Сортировать массив по последней паре символов его значений? - PullRequest
1 голос
/ 28 марта 2012

Как в PHP можно отсортировать массив по последним двум символам его значений?Возьмем, к примеру, следующий массив:

$donuts[0] = "Chocolate 02";
$donuts[1] = "Jelly 16";
$donuts[2] = "Glazed 01";
$donuts[3] = "Frosted 12";

После сортировки массив будет выглядеть следующим образом (обратите внимание на порядок, основанный на последних двух символах каждого значения ... также обратите внимание на переписанные индексы):

$donuts[0] = "Glazed 01";
$donuts[1] = "Chocolate 02";
$donuts[2] = "Frosted 12";
$donuts[3] = "Jelly 16";

Кажется, я не могу найти встроенную функцию, которая могла бы сделать это и ломала мне голову над самым простым и эффективным способом добиться этого.Помогите!И спасибо!

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Это должно сработать:

header('Content-Type: Text/Plain');
$donuts[0] = "Chocolate 02";
$donuts[1] = "Jelly 16";
$donuts[2] = "Glazed 01";
$donuts[3] = "Frosted 12";

print_r($donuts);

usort($donuts, function ($a, $b){
    return substr($b, -2) - substr($a, -2);
});

print_r($donuts);

ПРИМЕЧАНИЕ

  1. Чтобы преобразовать из старшего в самый маленький:

    return substr($b, -2) - substr($a, -2);
    
  2. В этом ответе предполагается, что следует использовать последние 2 символа.

ОБНОВЛЕНИЕ

Дозаставить его работать на PHP версии 5.2, измените часть return на:

return substr($b, strlen($b) - 2) - substr($a, strlen($a) - 2);
1 голос
/ 28 марта 2012
usort($donuts, function ($a, $b) {
    preg_match('/\d+$/', $a, $matchA);
    preg_match('/\d+$/', $b, $matchB);
    return $matchA[0] - $matchB[0];
});

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

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