2012-03-21 3 views
-1

Я пытаюсь сортировать массив.Пользовательская сортировка по PHP?

У меня есть массив данных, где каждая строка представляет новый индекс в массиве. Мне нужно отсортировать его по первому числу.

Мой массив:

7[^.^]username[^.^]idnumber[^.^]State[^.^] 
13[^.^] username[^.^] idnumber[^.^] State[^.^] 
9[^.^] username[^.^] idnumber[^.^] State[^.^] 
19[^.^] username[^.^] idnumber[^.^] State[^.^] 

ksort и asort вид работы, но он распознает "9", как больше, чем "81", так что он будет возвращать следующее:

13[^.^] username[^.^] idnumber[^.^] State[^.^] 
19[^.^] username[^.^] idnumber[^.^] State[^.^] 
7[^.^]username[^.^]idnumber[^.^]State[^.^] 
9[^.^] username[^.^] idnumber[^.^] State[^.^] 

Я знаю, что мне нужен какой-то обычай, но я не знаю, как это сделать. Благодарю.

+1

Что такое массив PHP? Я вижу в нем 16 лиц. Вы должны опубликовать вывод 'print_r' или' var_dump' ... – Paulpro

+0

Возможно, вам удастся уйти с natsort: http://www.php.net/manual/en/function.natsort.php – Paulpro

ответ

1

Все PHP sort() функции могут принимать sort_flags в качестве второго аргумента. Попробуйте использовать SORT_NUMERIC:

sort($myArray, SORT_NUMERIC);

Или использовать usort() для пользовательской сортировки CallBack

+0

sort ($ myArray, SORT_NUMERIC); совершенен, но могу ли я спускаться, а не подниматься? – Chase

+0

array_reverse ($ array, true); может работать, но я чувствую, что это будет медленным для больших объемов данных. – Chase

+1

Используйте ['rsort ($ array, SORT_NUMERIC)'] (http://www.php.net/manual/en/function.rsort.php) :) – jmlnik

0

PHP предоставляет функцию под названием usort() для создания пользовательской сортировки. Он работает, создавая функцию сравнения, которая будет возвращать либо 1, 0, либо -1 в зависимости от двух сравниваемых значений и как вы определяете свою логику.

Вот пример из документации:

<?php 

function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

$a = array(3, 2, 5, 6, 1); 

usort($a, "cmp"); 

foreach ($a as $key => $value) { 
    echo "$key: $value\n"; 
} 

?> 

Какие выходы:

0: 1 
1: 2 
2: 3 
3: 5 
4: 6 
1
usort($array, function ($a, $b) { return (int)$a - (int)$b; }); 

Это происходит потому, что работать кастинг «13 [^. ^] Имя пользователя [^. ^] ... "до int отрежет что-нибудь после первого символа не-int.

Возможно, вам стоит лучше обработать ваш «массив», хотя для того, чтобы отделить это числовое значение от собственного индекса массива.

Смежные вопросы