在使用PHP时出现问题

时间:2018-06-06 12:12:35

标签: php arrays rest sorting substr

我在使用usort订购数组时遇到了一些问题。目前,它正在查看每个值的第一个数字并根据它进行排序,这很好,但这意味着代替 - 街道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");

修改

所以,我现在回来的阵列看起来像这样:

[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。

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 '</pre>';

1 个答案:

答案 0 :(得分:0)

根据您更新的问题,我们建议。如果你的字符串总是以数字开头,你可以简单地在usort中转换为int并按如下排序:

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

php7中的spaceship operator使得3路比较变得更加清晰:

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

两者都做同样的事情 - 如果你使用的是php7 +,请使用后者。