【问题标题】:USort Multi Index Array - Doesn't Return CorrectlyUSort 多索引数组 - 不正确返回
【发布时间】:2015-08-16 14:49:57
【问题描述】:

我在使用 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 完成,我的数组就不会改变。看起来,查看usort() 正在通过引用传递数组并在完成时返回布尔值的 PHP 文档。我在usort() 中遗漏了什么使我的数组保持不变?

【问题讨论】:

    标签: php arrays sorting multidimensional-array usort


    【解决方案1】:

    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'] );
            } );
        }
    }
    

    【讨论】:

    • 我应该知道 foreach 是如何工作的,但我想我的大脑一直在掩饰它并指责 usort。感谢您指出这一点/您的帮助!允许时将接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多