我有一个如下数组:
Array ( [0] => Array ( 'name' => "Friday" 'weight' => 6 ) [1] => Array ( 'name' => "Monday" 'weight' => 2 ) )
我想获取该数组中的最后一个值('weight'),并使用它来对主数组元素进行排序。所以,在这个数组中,我想对它进行排序,以便'Monday'元素出现在'Friday'元素之前。
答案 0 :(得分:39)
您可以将usort
用作:
function cmp($a, $b) {
return $a['weight'] - $b['weight'];
}
usort($arr,"cmp");
答案 1 :(得分:6)
可以使用匿名函数完成。
此外,如果您的'权重'是字符串,请使用其他返回之一(请参阅注释掉的行):
<?php
$arr = array(
0 => array (
'name' => 'Friday',
'weight' => 6,
),
1 => array (
'name' => 'Monday',
'weight' => 2,
),
);
// sort by 'weight'
usort($arr, function($a, $b) { // anonymous function
// compare numbers only
return $a['weight'] - $b['weight'];
// compare numbers or strings
//return strcmp($a['weight'], $b['weight']);
// compare numbers or strings non-case-sensitive
//return strcmp(strtoupper($a['weight']), strtoupper($b['weight']));
});
var_export($arr);
/*
array (
0 => array (
'name' => 'Monday',
'weight' => 2,
),
1 => array (
'name' => 'Friday',
'weight' => 6,
),
)
*/
答案 2 :(得分:5)
答案 3 :(得分:4)
您也可以使用匿名功能。
usort($items, function($a, $b) {
return $a['name'] > $b['name'];
});
答案 4 :(得分:3)
同意usort,我有时也会使用array_multisort(http://ca2.php.net/manual/en/function.usort.php)示例3,对数据库结果进行排序。 你可以这样做:
<?php
$days = array(
array('name' => 'Friday', 'weight' => 6),
array('name' => 'Monday', 'weight' => 2),
);
$weight = array();
foreach($days as $k => $d) {
$weight[$k] = $d['weight'];
}
print_r($days);
array_multisort($weight, SORT_ASC, $days);
print_r($days);
?>
输出:
Array
(
[0] => Array
(
[name] => Friday
[weight] => 6
)
[1] => Array
(
[name] => Monday
[weight] => 2
)
)
Array
(
[0] => Array
(
[name] => Monday
[weight] => 2
)
[1] => Array
(
[name] => Friday
[weight] => 6
)
)
答案 5 :(得分:2)
如果按您排序的字段为title
name
字符串,则为
array_multisort + Natural Sorting和 CaseInSensitivity 的标志是要走的路:
$sort_by_title = array();
foreach($items as $item) {
$sort_by_title [] = $item['title'];
}
array_multisort($sort_by_title , SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $items );
答案 6 :(得分:0)
注意,如果你要排序的元素是像.0534和.0353这样的浮点数(比如一个百分比),那么你必须将它们乘以1000.不确定为什么坦率地说...似乎usort似乎比较整数值。
花了我一段时间才想出那个......
和2个可能不会立即明显的提示:
答案 7 :(得分:-1)
这是一个很酷的功能,可能会有所帮助:
function subval_sort($a,$subkey,$sort) {
foreach($a as $k=>$v) {
$b[$k] = strtolower($v[$subkey]);
}
if($b)
{
$sort($b);
foreach($b as $key=>$val) {
$c[] = $a[$key];
}
return $c;
}
}
将数据作为$a
发送到数组$subkey
,将$sort
变量设为'asort'或'sort'