PHP按嵌套值的字母顺序排序2d数组

时间:2012-03-26 12:42:01

标签: php multidimensional-array sorting

我有一个如下所示的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 个答案:

答案 0 :(得分:30)

你应该使用usort()(我在这里假设PHP 5.3+):

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

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

EDIT2: 这是PHP 5.3之前的版本:

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

uasort($your_array, "compareElems");