自然地按字母数字键对数组进行排序

问题描述 投票:0回答:5

如何通过键对这样的数组进行排序,从较小的分辨率到较大的分辨率:

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

应该是:

  • 60x60
  • 90x90
  • 120x120
  • 200x200
  • ...
php arrays sorting natural-sort ksort
5个回答
10
投票

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”和后面的内容将做什么——但是,无论如何,键的那部分没用,因为它纯粹是冗余信息)*

10
投票

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

uksort($array, 'strnatcasecmp');

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

2
投票

尝试使用 ksort()

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

编辑:为了使答案完整,请使用

SORT_NUMERIC
标志。


0
投票

如果您查看 PHP 的 Sorting Arrays 手册页,您可以看到有几个用于根据数组键对数组进行排序的选项,其中 ksort(使用

SORT_NUMERIC
修饰符)最有可能是其中一个你在追赶。

© www.soinside.com 2019 - 2024. All rights reserved.