按特定键的值对数组进行排序


Sort array by value of a specific key

我有一个这样的数组:

$currentTerm = array(
  'name' => $term->name,
  'weight' => $term->weight
);

我想按weight键对整个数组进行排序。我不知道怎样才能做到这一点。有什么想法吗?或者我应该为此编写一个自定义函数吗?

p.S有些权重可以是相同的;因此,将它们存储为密钥不是一种选择。它是多维的,有一个子键,它以与上面相同的方式递归填充。

您可以创建一个自定义排序方法usort()。

它的工作原理与此类似:

usort($array, function($a,$b) {
    if($a->weight === $b->weight) return 0;
    return ($a->weight < $b->weight) ? -1 : 1;
});

如果PHP7未来的人来到这里,他们可以使用这个(宇宙飞船!):

usort($array, function($a,$b) {
    return $a->weight <=> $b->weight;
});

PHP7之前的一个完整(且繁琐)示例是:

<?php
class Obj {
    public $name;
    public $weight;
    function __construct($name,$weight) {
        $this->name = $name;
        $this->weight = $weight;
    }
}
$array = array(
    new Obj("A",3),
    new Obj("B",10),
    new Obj("C",8),
);
usort($array, function($a,$b) {
    if($a->weight == $b->weight) return 0;
    return ($a->weight < $b->weight) ? -1 : 1;
});
print_r($array);
?>

查看array_multisort()

$weight = array();
foreach ($currentTerm as $key => $row)
{
    $weight[$key] = $row['weight'];
}

然后

array_multisort($weight, SORT_ASC, $currentTerm);

array_multisort($weight, SORT_DESC, $currentTerm);

您可以尝试以下代码:

//define a comparison function
function cmp($a, $b) {
    if ($a['status'] == $b['status']) {
        return 0;
    }
    return ($a['status'] < $b['status']) ? -1 : 1;
}
usort($array, "cmp");