php:数组按字符串键排序

时间:2011-04-04 06:58:36

标签: php arrays sorting

如何通过键将数组排序,从较小的分辨率到较大的分辨率:

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

应该是:

  • 60x60
  • 90x90
  • 120×120
  • 200×200
  • ...

5 个答案:

答案 0 :(得分: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'做什么以及随后如何 - 但是,无论如何,这部分是密钥是无用的,因为它是纯粹的重信息信息)

答案 1 :(得分:8)

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

uksort($array, 'strnatcasecmp');

答案 2 :(得分:2)

尝试使用ksort()

  

按键对数组进行排序,保持键   数据相关性。这很有用   主要用于关联数组。

编辑:要完成答案,请使用SORT_NUMERIC标记。

答案 3 :(得分: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];
}

答案 4 :(得分:0)

如果您查看PHP的Sorting Arrays手册页,您可以看到有几个选项可以根据键选择排序数组ksort(使用SORT_NUMERIC修饰符)很可能就是你所追求的那个。