PHP:按照值的长度对数组进行排序?

时间:2009-05-08 04:22:11

标签: php arrays

我做了一个anagram机器,我有一系列正面匹配。问题是它们都处于不同的顺序,我希望能够对数组进行排序,以便首先显示最长的数组值。

有人对如何做到这一点有任何想法吗?

10 个答案:

答案 0 :(得分:137)

使用http://us2.php.net/manual/en/function.usort.php

使用此自定义功能

function sort($a,$b){
    return strlen($b)-strlen($a);
}

usort($array,'sort');

如果你想保留旧索引,请使用uasort,如果你不在乎,请使用usort。

另外,我相信我的版本更好,因为usort是一种不稳定的类型。

$array = array("bbbbb", "dog", "cat", "aaa", "aaaa");
// mine
[0] => bbbbb
[1] => aaaa
[2] => aaa
[3] => cat
[4] => dog

// others
[0] => bbbbb
[1] => aaaa
[2] => dog
[3] => aaa
[4] => cat

答案 1 :(得分:29)

PHP7即将推出。在PHP7中,您可以使用Spaceship Operator

usort($array, function($a, $b) {
    return strlen($b) <=> strlen($a);
});

希望这可以在将来帮助你。

答案 2 :(得分:10)

function sortByLength($a,$b){
  if($a == $b) return 0;
  return (strlen($a) > strlen($b) ? -1 : 1);
}
usort($array,'sortByLength');

答案 3 :(得分:1)

制作数组元素的strlen数组,并使用数组multisort

foreach($Yourarray as $c=>$key) {               
    $key['maxlen'] = strlen($key);  
    $sort_numcie[] = $key['maxlen'];
}

array_multisort($sort_numcie, $Yourarray);  

这肯定会奏效。我确定!

答案 4 :(得分:1)

降序:

$array = ['aa', 'bb', 'c', 'ccc', 'a', 'ertre'];

usort($array, function($a, $b){
   return strlen($a) < strlen($b);
});

var_export($array);

// Output
array (
  0 => 'ertre',
  1 => 'ccc',
  2 => 'aa',
  3 => 'bb',
  4 => 'c',
  5 => 'a',
)

升序:

$array = ['aa', 'bb', 'c', 'ccc', 'a', 'ertre'];

usort($array, function($a, $b){
   return strlen($a) > strlen($b);
});

// Output
array (
  0 => 'c',
  1 => 'a',
  2 => 'aa',
  3 => 'bb',
  4 => 'ccc',
  5 => 'ertre',
)

答案 5 :(得分:0)

除了接受的答案外,还要按照升序或降序的长度对数组进行排序:

function strlen_compare($a,$b){
    if(function_exists('mb_strlen')){
         return mb_strlen($b) - mb_strlen($a);
    }
    else{
         return strlen($b) - strlen($a);
    }
}

function strlen_array_sort($array,$order='dsc'){
    usort($array,'strlen_compare');
    if($order=='asc'){
        $array=array_reverse($array);
    }
    return $array;
}

答案 6 :(得分:0)

array_multisort(array_map('count', $arr), SORT_DESC, $arr);

答案 7 :(得分:0)

这是使用飞船运算符的一种方式(需要PHP 7.0):

$arr = ['apple','pear','oranges','banana'];
usort($arr, function ($a, $b) { return (strlen($a) <=> strlen($b)); });
print_r($arr);

答案 8 :(得分:-1)

这是我过去做过的一种方式。

// Here's the sorting...
$array = array_combine($words, array_map('strlen', $words));
arsort($array);

答案 9 :(得分:-5)

很简单。

function LSort(a,b){return a.length-b.length;}

var YourArray=[[1,2,3,4,5,6], ['a','b'], ['X','Y','Z'], ['I','Love','You'], ['good man']];

YourArray.sort(Lsort);

结果:

['good man'] Length=1
['a','b'] Length=3
['X','Y','Z'] Length=3
['I','Love','You'] Length=3
[1,2,3,4,5,6] Length=6