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'=>'Hey','1'=>'H','2'=>'He'));

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')

ここではインライン関数を使用していることに注意してください。これはphp5.3以降で可能です。phpの下位バージョンでは、従来の関数を定義し、その関数の名前をに渡す必要があります。usort()

于 2011-09-16T13:53:41.027 に答える