CrewCut
@CrewCut
Коплю силы на переезд в тропики

Как настроить сортировку типа 1-2-10-11 для массива в PHP?

Есть массив, примерно такого вида:
Array (
	[import_files/5d/namers.jpg] => Array ([description] => 1 колечко блестящее),
	[import_files/5d/name31.jpg] => Array ([description] => 10 морозное утро),
	[import_files/5d/name13.jpg] => Array ([description] => 4 морозное утро),
	[import_files/5d/name2.jpg] => Array ([description] => 8 колечко матовое)
	[import_files/5d/name12.jpg] => Array ([description] => 12 морозное утро),
	[import_files/5d/name14.jpg] => Array ([description] => 5 леопард),
)


Мне нужно сортировать его с сохранением отношения ключ-значение по значению по алфавиту. Использую для этого asort(); - но сортирует не совсем корректно, на выходе получается вот такая сортировка (указываю только первые цифры):
  • 1
  • 10
  • 12
  • 4
  • 5
  • 8


Хотелось бы получить такую:
  • 1
  • 4
  • 5
  • 8
  • 10
  • 12
  • Вопрос задан
  • 789 просмотров
Решения вопроса 2
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
php.net/manual/ru/function.uasort.php

$array = uasort($array, function(a, b){

тут надо сравнить буквы (если по алфавиту) 
из a['description'] с b['description']
и вернуть в $res -1, 0 или 1 соответственно

return $res;

});

print_r($array);
Ответ написан
copist
@copist
Empower people to give
Сортировка массивов в натуральном порядке значений из подмассивов с помощью uksort + strnatcmp()

$unsortedArray = array(
    'import_files/5d/namers.jpg' => array('description' => '1 колечко блестящее'),
    'import_files/5d/name31.jpg' => array('description' => '10 морозное утро'),
    'import_files/5d/name13.jpg' => array('description' => '4 морозное утро'),
     // ...
);
uksort($unsortedArray, function($a, $b) use($unsortedArray) {
    return strnatcmp($unsortedArray[$a]['description'], $unsortedArray[$b]['description']);
});


Решение полностью codepad.org/2AaS37SE
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
asort($arr, SORT_NUMERIC);

UPD: у меня работает
$arr = [
    'a' => '1 a',
    'b' => '10 b',
    'c' => '4 c',
    'd' => '8 d',
    'e' => '12 e',
    'f' => '5 f'
];

asort($arr);
var_dump($arr);

asort($arr, SORT_NUMERIC);
var_dump($arr);

array(6) {
  'a' =>
  string(3) "1 a"
  'b' =>
  string(4) "10 b"
  'e' =>
  string(4) "12 e"
  'c' =>
  string(3) "4 c"
  'f' =>
  string(3) "5 f"
  'd' =>
  string(3) "8 d"
}
array(6) {
  'a' =>
  string(3) "1 a"
  'c' =>
  string(3) "4 c"
  'f' =>
  string(3) "5 f"
  'd' =>
  string(3) "8 d"
  'b' =>
  string(4) "10 b"
  'e' =>
  string(4) "12 e"
}
Ответ написан
Ваш ответ на вопрос

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

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