我有这个数组:
$animals = array(
'0' => array('name' => 'cat', 'order' => '2'),
'1' => array('name' => 'dog', 'order' => '1'),
'2' => array('name' => 'fish', 'order' => '3')
);
我想把它变成这个:
$animals = array(
'1' => array('name' => 'dog', 'order' => '1'),
'0' => array('name' => 'cat', 'order' => '2'),
'2' => array('name' => 'fish', 'order' => '3')
);
如您所见,我想根据order
键进行排序。怎么做?
答案 0 :(得分:3)
使用PHP's native usort function和用户定义的回调读取订单字段。
如果保持索引关联至关重要,请使用uasort。
答案 1 :(得分:1)
您可以使用array_multisort()
$animals = array(
'0' => array('name' => 'cat', 'order' => '2'),
'1' => array('name' => 'dog', 'order' => '1'),
'2' => array('name' => 'fish', 'order' => '3')
);
$tmp = array();
foreach($animals as $k=>$r){
$tmp[] = $r['order'];
}
array_multisort($tmp,SORT_ASC,$animals); // SORT_DESC to reverse
echo '<pre>',print_r($animals),'</pre>';
答案 2 :(得分:1)
尝试使用usort()
$animals = array(
'0' => array('name' => 'cat', 'order' => '2'),
'1' => array('name' => 'dog', 'order' => '1'),
'2' => array('name' => 'fish', 'order' => '3')
);
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($animals, build_sorter('order'));
var_dump($animals);