@BedOmar
Веб-разработчик

Как отсортировать массив за цифрами?

Есть массив с значениями image_name_1.jpg, image_name_5.jpg, image_name_2.jpg, image_name_N.jpg, image_name_88.jpg и тд. как отсортировать массив за цифрами (если использовать sort(), то будет image_name_1.jpg, image_name_11.jpg, и тд )
как сортировать массив с номером 1, 2, 3... по порядку?
  • Вопрос задан
  • 170 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
У функции sort есть флаги сортировки.
sort($data, SORT_NATURAL);

Демка: ideone.com/34siec
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега PHP
♬♬
Disclaimer: неоптимальный вариант для популяризации функций PHP

Можно использовать sscanf(), чтобы вынимать число из каждой строки (если они одинаково начинаются) и сортировать массив своей функцией, переданной в usort():

$arr = [
  'image_name_1.jpg',
  'image_name_11.jpg',
  'image_name_2.jpg',
  'image_name_100.jpg',
  'image_name_001.jpg',
];

usort($arr, function($a, $b) {
  $format = 'image_name_%d.jpg';
  list($aVal) = sscanf($a, $format);
  list($bVal) = sscanf($b, $format);
  return $aVal - $bVal;
});

echo json_encode($arr);
/*
["image_name_1.jpg","image_name_001.jpg","image_name_2.jpg","image_name_11.jpg","image_name_100.jpg"]
*/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@green_goo
Регуляркой вытащить число, сделать массив вида [число => соответствующий файл]
Отсортировать новый массив по ключам
Ответ написан
JaxAdam
@JaxAdam
Junior Full-Stack Developer
Не профессионал в PHP, но sort(), кажется, сравнивает строки. Естественно строка '2' будет старше чем '11', потому что перебор символов строки идет слева направо. Для того чтобы отсортировать как положено, вам необходимо обрезать строку до начального символа числа, а потом преобразовать оставшуюся строку в число. И применить sort() уже к числам. Ну я пытался объяснить) Люблю JS, php только изучаю
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы