3

我有这个数组:

$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键进行排序。这个怎么做?

4

3 回答 3

3

使用PHP 的原生 usort 函数和用户定义的回调来读取订单字段。

如果维护索引关联很关键,请改用uasort

于 2013-06-12T20:26:13.397 回答
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);
于 2013-06-12T20:36:23.280 回答
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>';
于 2013-06-12T20:28:12.360 回答