2011-04-04 110 views
4

我怎么能由它的键排序这样的阵列,从较小的分辨率较大的一个:PHP:由字符串键数组排序

$sizes = array(
    '120x120' => 'large', 
    '60x60' => 'small', 
    '200x200' => 'very large', 
    '90x90' => 'medium', 
... 

应该是:

  • 60X60
  • 90x90
  • 120×120
  • 200x200的
  • ...

回答

8

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信息)

+0

+1就是这样... – 2011-04-04 07:04:55

+0

谢谢,我没有想到按数字排序会工作,因为我有一个'x'在那里:) – Alex 2011-04-04 07:06:26

+0

@Alexandra PHP将有效地截断“数字”时,它击中'x'。因此,你只是在第一个数字上进行排序。 – 2011-04-04 07:08:24

2

尝试用ksort()

按键排序数组,将键 保持为数据相关性。 主要用于关联数组。

编辑:为了使答案完整,请使用SORT_NUMERIC标志。

+0

的解释将与downvote顺利! – 2011-04-04 07:02:26

+1

-1这不起作用试着去了解问题的输出'[120×120] =>大 [200×200] =>非常大的 [60×60] =>小 [90x90] =>中 ' – 2011-04-04 07:03:17

+1

这些都是字符串,不会得到排序像整数 – 2011-04-04 07:04:28

0

如果你看看PHP的Sorting Arrays手册页,你可以看到有基于它的按键排列,其中ksort(使用SORT_NUMERIC修改)是最有可能选你后一个几个选项。

+0

但它并不真正的工作。我得到120x120,200x200,60x60,90x90 ... – Alex 2011-04-04 07:03:33

+0

@亚历山德拉道歉 - 您需要使用'SORT_NUMERIC'修饰符ksort。 @帕斯卡的上级答案完美地说明了这一点。 :-) – 2011-04-04 07:04:37

7

需要通过按键自然排序,可以使用uksort

uksort($array, 'strnatcasecmp'); 
+1

我相信这是一个更好的答案,以及更通用的目的。这将正确排序'120x120','120x90',而数字键排序不会。 – NemesisX00 2015-04-06 18:09:16

2
$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]; 
}