数组按值编号排序

时间:2011-09-16 13:48:37

标签: php multidimensional-array sorting chars

您好我觉得我有一个这样的数组:

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

4 个答案:

答案 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);
?>

DEMO

答案 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()