PHP:如何根据其内部数组的一个值对包含内部数组的数组进行排序?

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键进行排序。如何做到这一点?


Joe...也许是因为他想按照特定的顺序显示结果吧?除此之外,你还有什么其他原因想要排序呢? - Kylie
@joe,现在当我使用foreach循环$animals时,它的顺序是这样的:猫、狗、鱼。我希望按照order key的正确顺序排列。不幸的是,当数组最初构建时,我无法控制代码。 - user967451
3个回答

3

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>';

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);

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