В 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";
Кажется, я не могу найти встроенную функцию, которая может это сделать, и я пробовал свой мозг для простейшего и эффективного способа добиться этого. Помогите! И спасибо!
Это должно сделать трюк:
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);
ЗАМЕТКА
Чтобы преобразовать от наивысшего к наименьшему:
return substr($b, -2) - substr($a, -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
одни и те же строки.