@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... по порядку?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 2
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 только изучаю
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Smart Медицина Москва
от 150 000 ₽
Spice IT Recruitment Москва
До 230 000 ₽
Playkot Санкт-Петербург
от 150 000 до 200 000 ₽
09 июл. 2020, в 11:53
20000 руб./за проект
09 июл. 2020, в 11:49
20000 руб./за проект
09 июл. 2020, в 11:30
1000 руб./за проект