Сортировка массива по последним символам пары значений?

В 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"; 

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

Solutions Collecting From Web of "Сортировка массива по последним символам пары значений?"

Это должно сделать трюк:

 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); 
 usort($donuts, function ($a, $b) { preg_match('/\d+$/', $a, $matchA); preg_match('/\d+$/', $b, $matchB); return $matchA[0] - $matchB[0]; }); 

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