数组按值数字符排序


Array sort by value number chars

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

[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()