我怎么能由它的键排序这样的阵列,从较小的分辨率较大的一个:PHP:由字符串键数组排序
$sizes = array(
'120x120' => 'large',
'60x60' => 'small',
'200x200' => 'very large',
'90x90' => 'medium',
...
?
应该是:
- 60X60
- 90x90
- 120×120
- 200x200的
- ...
我怎么能由它的键排序这样的阵列,从较小的分辨率较大的一个:PHP:由字符串键数组排序
$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'
会做什么以及接下来的内容 - 但无论如何,这部分关键是无用的,因为这纯粹是redondant信息)
的解释将与downvote顺利! – 2011-04-04 07:02:26
-1这不起作用试着去了解问题的输出'[120×120] =>大 [200×200] =>非常大的 [60×60] =>小 [90x90] =>中 ' – 2011-04-04 07:03:17
这些都是字符串,不会得到排序像整数 – 2011-04-04 07:04:28
如果你看看PHP的Sorting Arrays手册页,你可以看到有基于它的按键排列,其中ksort(使用SORT_NUMERIC
修改)是最有可能选你后一个几个选项。
但它并不真正的工作。我得到120x120,200x200,60x60,90x90 ... – Alex 2011-04-04 07:03:33
@亚历山德拉道歉 - 您需要使用'SORT_NUMERIC'修饰符ksort。 @帕斯卡的上级答案完美地说明了这一点。 :-) – 2011-04-04 07:04:37
需要通过按键自然排序,可以使用uksort
uksort($array, 'strnatcasecmp');
我相信这是一个更好的答案,以及更通用的目的。这将正确排序'120x120','120x90',而数字键排序不会。 – NemesisX00 2015-04-06 18:09:16
$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];
}
+1就是这样... – 2011-04-04 07:04:55
谢谢,我没有想到按数字排序会工作,因为我有一个'x'在那里:) – Alex 2011-04-04 07:06:26
@Alexandra PHP将有效地截断“数字”时,它击中'x'。因此,你只是在第一个数字上进行排序。 – 2011-04-04 07:08:24