我想我有一个这样的数组:
[0]=>[
[0]=>'Hey',
[1]=>'H',
[2]=>'He',
]
现在我想按数字字符排序并返回如下内容:
[0]=>[
[0]=>'H',
[1]=>'He',
[2]=>'Hey',
]
也许答案是array_sort(),但我不能这样做。我也不想循环数组来检查值的字符数,但如果这是我需要使用的唯一方法:P
率如何返回按['name']键数ASC (h -he -hey -heyh - heyhey)排序的相同数组?
array(5) {
[0]=>
array(2) {
["id"]=>
object(MongoId)#26 (1) {
["$id"]=>
string(24) "4e72858ccaa47ca608030000"
}
["name"]=>
string(4) "h"
}
[1]=>
array(2) {
["id"]=>
object(MongoId)#29 (1) {
["$id"]=>
string(24) "4e72858ccaa47ca608040000"
}
["name"]=>
string(10) "hey"
}
[2]=>
array(2) {
["id"]=>
object(MongoId)#31 (1) {
["$id"]=>
string(24) "4e72858ccaa47ca608400000"
}
["name"]=>
string(1) "heyhey"
}
[3]=>
array(2) {
["id"]=>
object(MongoId)#33 (1) {
["$id"]=>
string(24) "4e72858ccaa47ca6081a0000"
}
["name"]=>
string(6) "he"
}
[4]=>
array(2) {
["id"]=>
object(MongoId)#35 (1) {
["$id"]=>
string(24) "4e72858ccaa47ca6083d0000"
}
["name"]=>
string(3) "heyh"
}
}
如果您想按字符数排序,那么usort
是您的选择。它允许您定义自己的排序函数。
function lengthsort($s1, $s2) {
if (strlen($s1['name']) < strlen($s2['name'])) {
return -1;
} elseif (strlen($s1['name']) > strlen($s2['name'])) {
return 1;
} else {
return 0;
}
}
usort($array, 'lengthsort');
PHP的usort
允许您指定自定义排序函数:
<?php
$arr = array(array('Hey', 'H', 'He'));
print_r($arr);
usort($arr[0], function($a, $b) {
return strlen($a) - strlen($b);
});
print_r($arr);
?>
演示他们不是像PHP中的array_sort()那样的函数,你只需要使用sort()函数,它按值对数组进行排序,并保持关键信息不变。
$ arr =数组(' 0 ' =>数组(' 0 ' => '嘿',' 1 ' => ' H ', ' 2 ' => '他'));
foreach($arr as $k=>$v):
$arr1 = $v;
sort($arr1);
print_r($arr1);
endforeach;
?>
看一下ussort(),它允许您定义自己的排序函数:
$myarray = array('Hey','H','He');
usort($myarray,function($a, $b){
if (strlen($a) == strlen($b)) {
return 0;
}
return (strlen($a) < strlen($b)) ? -1 : 1;
});
var_dump($myarray); // array('H','He','Hey')
请注意,我在这里使用的是内联函数,这在php 5.3+中是可能的-在较低版本的php中,您必须定义一个传统的函数并将该函数的名称传递给usort()