您好我觉得我有一个这样的数组:
[0]=>[
[0]=>'Hey',
[1]=>'H',
[2]=>'He',
]
现在我想按数字字符排序并返回这样的somenthing:
[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"
}
}
答案 0 :(得分:2)
如果您想按字符数排序,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');
答案 1 :(得分:2)
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);
?>
答案 2 :(得分:2)
它们不像php中的array_sort()那样只需要使用sort()函数,该函数按值对数组进行排序并保持关键信息不变。
$ arr = array('0'=&gt; array('0'=&gt;'嘿','1'=&gt;'H','2'=&gt;'他') );
foreach($arr as $k=>$v):
$arr1 = $v;
sort($arr1);
print_r($arr1);
endforeach;
&GT;
答案 3 :(得分:1)
看看usort(),你可以定义一个自己的排序函数:
$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()