2012-03-26 112 views
7

按字母顺序排列我有一个PHP数组,看起来像这样:PHP排序2D通过嵌套价值

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', 
    } 
} 

,我想通过在嵌套阵列中的“标题”键对它进行排序,看起来像这样:

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

可能重复http://stackoverflow.com/questions/2699086/php-sort-按值多维数组) – 2012-03-26 12:44:31

回答

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"); 
[由值PHP排序多维数组(的
+1

完美,这正是我所需要的。在SO上有几个可供选择的解决方案,但这似乎比大多数(或全部)更优雅。 – melat0nin 2012-03-26 13:48:12

+0

嗯,刚刚转移到PHP <5.3的服务器,所以嵌入式功能不起作用..我将如何重构这与uasort之外的函数()实现相同的效果? – melat0nin 2012-03-28 14:17:37