Возникли проблемы с PHP usort - PullRequest
0 голосов
/ 06 июня 2018

У меня проблемы с массивом, который я заказываю с использованием usort.В настоящее время он смотрит на первое число каждого значения и упорядочивает на основе того, что хорошо, но это означает, что вместо - 1 улица 2 улица 3 улица, я получаю - 1 улица 10 улица 11улица.

Я пытался добавить substr, но это не имело никакого значения - что мне не хватает?

function cmp($a, $b)
{
    return strcmp( substr( $a['0'], 0, 2 ), substr( $b['0'], 0, 2 ) );
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

...

usort($a, "cmp");

EDIT

Итак, массив IВозвращаюсь на данный момент выглядит так:

[0] => Array
    (
        [0] => 1 The Street, The City, The County
        [1] => FriA
    )

[1] => Array
    (
        [0] => 10 The Street, The City, The County
        [1] => FriB
    )

[2] => Array
    (
        [0] => 11 The Street, The City, The County
        [1] => FriA
    )

Первое значение - это адрес, второе - расписание.2 Улица в настоящее время отображается после 19, а не 1.

<code>function cmp( $a, $b ) {
    return strcmp( substr( $a[ '0' ], 0, 2 ), substr( $b[ '0' ], 0, 2 ) );
    if ( $a == $b ) {
        return 0;
    }
    return ( $a < $b ) ? -1 : 1;
}

foreach ( $json[ 'candidates' ] as $value ) {
    $address = $json[ 'candidates' ][ $index ][ 'attributes' ][ 'ADDRESS_1' ];
    $code = $json[ 'candidates' ][ $index ][ 'attributes' ][ 'CODE' ];
    $a[] = array( $address, $code );
    usort($a, "cmp");
    $index++;
}

echo '<pre>';print_r( $a );echo '
';

1 Ответ

0 голосов
/ 06 июня 2018

Исходя из вашего обновленного вопроса, здесь можно предложить.Если ваши строки всегда начинаются с числа, которое вы можете просто привести как int внутри usort и отсортировать следующим образом:

usort($arr, function($a, $b) {
    return (int)$a[0] == (int)$b[0] ? 0 : ((int)$a[0] < (int)$b[0] ? -1 : 1);
});

Оператор космического корабля в php7делает 3-х сторонние сравнения намного чище:

usort($arr, function($a, $b) {
    return (int)$a[0] <=> (int)$b[0];
});

Оба из них делают одно и то же - используйте последнее, если вы используете php7 +.

...