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

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

Войти через центр авторизации
Похожие вопросы
17 окт. 2019, в 03:16
37500 руб./за проект
16 окт. 2019, в 22:58
3200 руб./за проект
16 окт. 2019, в 22:43
3000 руб./за проект