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

时间:2015-11-06 08:23:10

标签: php arrays sorting

我有一个阵列:

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

我希望按weight键对整个数组进行排序。我无法弄清楚如何实现这一目标。有什么想法或者我应该为此写一个自定义函数吗?

P.S一些重量可以相同;所以将它们存储为钥匙不是一个选择。并且它是带有子键的多维,它以与上面相同的方式递归填充。

3 个答案:

答案 0 :(得分:5)

您可以创建自定义排序方法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);

?>

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以尝试以下代码:

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