按嵌套值字母顺序对PHP 2D数组进行排序

8

我有一个PHP数组,看起来像这样:

Array{
    [0] {
        'id'       => '0',
        'title'    => 'foo',
        'address'  => '123 Somewhere',
    }
    [1] {
        'id'       => '1',
        'title'    => 'bar',
        'address'  => '123 Nowhere',
    }
    [2] {
        'id'       => '2',
        'title'    => 'barfoo',
        'address'  => '123 Elsewhere',
    }
    [3] {
        'id'       => '3',
        'title'    => 'foobar',
        'address'  => '123 Whereabouts',
    }
}

我希望您可以将其按嵌套数组中的“title”关键字进行排序,结果如下:

Array{
    [1] {
        'id'       => '1',
        'title'    => 'bar',
        'address'  => '123 Nowhere',
    }
    [2] {
        'id'       => '2',
        'title'    => 'barfoo',
        'address'  => '123 Elsewhere',
    }
    [0] {
        'id'       => '0',
        'title'    => 'foo',
        'address'  => '123 Somewhere',
    }
    [3] {
        'id'       => '3',
        'title'    => 'foobar',
        'address'  => '123 Whereabouts',
    }
}

由于我通过嵌套键“id”跟踪每个嵌套数组,因此第一级键值并不重要。

我尝试过使用ksort(),但没有成功。


1
可能是PHP按值对多维数组进行排序的重复问题。 - Evan Mulawski
1个回答

33

你应该使用usort()函数(这里假设你使用的是PHP 5.3+):

usort($your_array, function ($elem1, $elem2) {
     return strcmp($elem1['title'], $elem2['title']);
});

编辑: 我没有注意到你想要保留索引关联,所以你实际上需要使用uasort()而不是usort(),参数相同。

编辑2: 这是 PHP 5.3 版本之前的版本:

function compareElems($elem1, $elem2) {
    return strcmp($elem1['title'], $elem2['title']);
}

uasort($your_array, "compareElems");

1
完美,这正是我所需要的。在SO上有一些替代方案,但这个似乎比大多数(或全部)都更优雅。 - melat0nin
哎呀,我刚刚转移到一个PHP <5.3的服务器上,所以嵌入式函数不起作用了...如何重构代码才能使在uasort之外的function()具有相同的效果? - melat0nin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接