我有一个阵列:
$currentTerm = array(
'name' => $term->name,
'weight' => $term->weight
);
我希望按weight
键对整个数组进行排序。我无法弄清楚如何实现这一目标。有什么想法或者我应该为此写一个自定义函数吗?
P.S一些重量可以相同;所以将它们存储为钥匙不是一个选择。并且它是带有子键的多维,它以与上面相同的方式递归填充。
答案 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)
$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");