【发布时间】:2011-04-04 06:58:36
【问题描述】:
如何通过键对这样的数组进行排序,从较小的分辨率到较大的分辨率:
$sizes = array(
'120x120' => 'large',
'60x60' => 'small',
'200x200' => 'very large',
'90x90' => 'medium',
...
?
应该是:
- 60x60
- 90x90
- 120x120
- 200x200
- ...
【问题讨论】:
如何通过键对这样的数组进行排序,从较小的分辨率到较大的分辨率:
$sizes = array(
'120x120' => 'large',
'60x60' => 'small',
'200x200' => 'very large',
'90x90' => 'medium',
...
?
应该是:
【问题讨论】:
ksort() 在数字模式下应该可以正常工作:
$sizes = array(
'120x120' => 'large',
'60x60' => 'small',
'200x200' => 'very large',
'90x90' => 'medium',
);
ksort($sizes, SORT_NUMERIC);
var_dump($sizes);
会得到你:
array
'60x60' => string 'small' (length=5)
'90x90' => string 'medium' (length=6)
'120x120' => string 'large' (length=5)
'200x200' => string 'very large' (length=10)
这将起作用,因为大小是数字 - 并且在 'x' 之前找到(不确定'x' 将做什么以及接下来的内容 - 但是,无论如何,这部分键是无用的,因为它纯粹是多余的信息)
【讨论】:
x :)
你需要自然的按键排序,可以使用uksort
uksort($array, 'strnatcasecmp');
【讨论】:
$sizes = array(
'120x120' => 'large',
'60x60' => 'small',
'200x200' => 'very large',
'90x90' => 'medium');
uksort($sizes, 'userSorting');
print_r($sizes);
function userSorting($a, $b) {
$a = explode('x', $a);
$b = explode('x', $b);
return $a[0] > $b[0];
}
【讨论】:
【讨论】:
[120x120] => large [200x200] => very large [60x60] => small [90x90] => medium
如果您查看 PHP 的 Sorting Arrays 手册页,您会看到有几个选项可以根据其键对数组进行排序,其中 ksort(使用 SORT_NUMERIC 修饰符)很可能是你所追求的。
【讨论】:
SORT_NUMERIC 修饰符来进行 ksort。 @Pascal 的出色回答完美地说明了这一点。 :-)