Пользовательская сортировка PHP? - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь отсортировать массив.

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

Мой массив:

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[^.^]

Я знаю, что мне нужна какая-то пользовательская сортировка, но я не уверен, как.Спасибо.

Ответы [ 3 ]

1 голос
/ 21 марта 2012

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

sort($myArray, SORT_NUMERIC);

Или используйте usort() для пользовательского обратного вызова сортировки

1 голос
/ 21 марта 2012
usort($array, function ($a, $b) { return (int)$a - (int)$b; });

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

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

0 голосов
/ 21 марта 2012

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...