1

嗨,我想我有一个这样的数组:

[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"
  }
}
4

4 回答 4

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');
于 2011-09-16T13:53:31.590 回答
2

PHPusort允许您指定自定义排序函数:

<?php
    $arr = array(array('Hey', 'H', 'He'));
    print_r($arr);

    usort($arr[0], function($a, $b) {
        return strlen($a) - strlen($b);
    });

    print_r($arr);
?>

演示

于 2011-09-16T13:55:45.107 回答
2

它们没有像 php 中的 array_sort() 这样的函数,您只需要使用 sort() 函数,该函数按值对数组进行排序并保持键信息不变。

$arr = array('0'=>array('0'=>'嘿','1'=>'H','2'=>'他'));

foreach($arr as $k=>$v):
$arr1 = $v;
sort($arr1);
print_r($arr1);
endforeach;

?>

于 2011-09-16T14:06:41.380 回答
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()

于 2011-09-16T13:53:41.027 回答