USort多索引数组 - 不能正确返回

时间:2015-06-02 17:08:47

标签: php arrays sorting multidimensional-array usort

我遇到了PHP usort()函数的问题。我目前有一个多索引数组,如下所示:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [title] => c
                    [more_fields] => '...'
                )

            [1] => Array
                (
                    [title] => a
                    [more_fields] => '...'
                )

            [2] => Array
                (
                    [title] => b
                    [more_fields] => '...'
                )

            [3] => Array
                (
                    [title] => xz
                    [more_fields] => '...'
                )

        )
)

我正在尝试遍历数组并按title索引对每个索引进行排序。这是没有任何测试输入的代码:

foreach( $my_arr as $arr ) {
    if( count( $arr ) > 1 ) {
        usort( $arr, function( $a, $b ) {
            return strcasecmp( $a['title'], $b['title'] );
        } );
    }
}

现在我希望能够工作,而且我知道我正在使用正确的索引,如果我在返回之前回显$a['title']$b['title'],我会得到如下数据:

a _ c | xz _ a | b _ a | c _ a | b _ c | xz _ b | c _ b | xz _ c

这很好,花花公子,但一旦foreach完成,我的数组就不变了。看起来,看看PHP文档usort()通过引用传递数组并在完成时返回布尔值。我的usort()中遗漏了什么让我的数组保持不变?

1 个答案:

答案 0 :(得分:3)

foreach适用于数组的副本。要修改实际数组,您需要引用该值(注意&):

foreach( $my_arr as &$arr ) {

或者你应该能够使用密钥和实际的数组$my_arr[$key]

foreach( $my_arr as $key => $arr ) {
    if( count( $arr ) > 1 ) {
        usort( $my_arr[$key], function( $a, $b ) {
            return strcasecmp( $a['title'], $b['title'] );
        } );
    }
}