2012-03-21 11 views
-1

配列をソートしようとしています。カスタムPHPソート?

私はデータの配列を持っています。各行は配列の新しいインデックスを表します。降順に並べ替える必要があります。

マイ配列:仕事の

7[^.^]username[^.^]idnumber[^.^]State[^.^] 
13[^.^] username[^.^] idnumber[^.^] State[^.^] 
9[^.^] username[^.^] idnumber[^.^] State[^.^] 
19[^.^] username[^.^] idnumber[^.^] State[^.^] 

ksortとASORT種類が、それは次のように戻ってくるので、それは、 "81" よりも大きいものとして "9" を認識します。

13[^.^] username[^.^] idnumber[^.^] State[^.^] 
19[^.^] username[^.^] idnumber[^.^] State[^.^] 
7[^.^]username[^.^]idnumber[^.^]State[^.^] 
9[^.^] username[^.^] idnumber[^.^] State[^.^] 

私は何らかの種類のカスタムソートが必要だと知っていますが、どうしたらよいか分かりません。ありがとう。

+1

どのようなPHP配列ですか?私は16人の顔を見る。 'print_r'や' var_dump'の出力を投稿するべきです... – Paulpro

+0

あなたはnatsortを手に入れることができます:http://www.php.net/manual/en/function.natsort.php – Paulpro

答えて

1

をすべてのPHP sort()関数はその2番目の引数としてsort_flagsを取ることができます。ここ

は、ドキュメントからの例です。 SORT_NUMERICを使用してみてください:

sort($myArray, SORT_NUMERIC);

それともこれは「13キャストので、動作するように起こるのカスタムソートコールバック

+0

sort ($ myArray、SORT_NUMERIC);完璧ですが、昇順ではなく下降させることができますか? – Chase

+0

array_reverse($ array、true);大量のデータでは遅くなると感じています。 – Chase

+1

['rsort($ array、SORT_NUMERIC)'](http://www.php.net/manual/en/function.rsort.php)を使用してください:) – jmlnik

0

PHPには、ユーザ定義ソートを作成するためのusort()という機能があります。これは、比較される2つの値とロジックの定義方法に応じて、1、0、または-1のいずれかを返す比較関数を作成して動作します。

<?php 

function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

$a = array(3, 2, 5, 6, 1); 

usort($a, "cmp"); 

foreach ($a as $key => $value) { 
    echo "$key: $value\n"; 
} 

?> 

出力:

0: 1 
1: 2 
2: 3 
3: 5 
4: 6 
1
usort($array, function ($a, $b) { return (int)$a - (int)$b; }); 

ためusort()を使用するユーザー名[^ ^。] ... [^を^。] "をintに設定すると、最初の非整数文字の後ろの文字は切り捨てられます。

"配列"は、その数値を別の配列インデックスに分ける方がよいでしょう。