2016-09-07 37 views
1

皆さん、私は文字列することにより、ネストされたcollectionalphabeticalyソートにしたい:laravel 5.3コレクションのソートUTF8文字列

$collection = collect([ 
    ["name"=>"maroon"], 
    ["name"=>"zoo"], 
    ["name"=>"ábel"], 
    ["name"=>"élof"] 
])->sortBy("name"); 

私は期待:

1=> "ábel" 
2=> "élof" 
3=> "maroon" 
4=> "zoo" 

をI代わりに

1=> "maroon" 
2=> "zoo" 
3=> "ábel" 
4=> "élof" 

私はこのためにいくつかのPHPスレッドを見ましたが、これに対するLaravelの回避策があるのか​​不思議です。ありがとう。ここで

答えて

1

はそれを行うために固体の方法だ:

$blank = array(); 
$collection = collect([ 
    ["name"=>"maroon"], 
    ["name"=>"zoo"], 
    ["name"=>"ábel"], 
    ["name"=>"élof"] 
])->toArray(); 

$count = count($collection); 

for ($x=0; $x < $count; $x++) { 
    $blank[$x] = $collection[$x]['name']; 
} 

$collator = collator_create('en_US'); 
var_export($blank); 
collator_sort($collator, $blank); 
var_export($blank); 

dd($blank); 

出力:

array (
    0 => 'maroon', 
    1 => 'zoo', 
    2 => 'ábel', 
    3 => 'élof', 
)array (
    0 => 'ábel', 
    1 => 'élof', 
    2 => 'maroon', 
    3 => 'zoo', 
) 

Laravelプリティ出力:

array:4 [ 
    0 => "ábel" 
    1 => "élof" 
    2 => "maroon" 
    3 => "zoo" 
] 

個人の読書や参考:後半の応答のため申し訳ありませんが、この答えは助けhttp://php.net/manual/en/class.collator.php

ホープ=)あなたは、この場合にCollat​​orクラスを使用する必要はありません

1

LaravelのコレクションsortByは、asort()arsort()を内部で使用しています。これは、現在設定されているロケールに応じてソートするフラグがSORT_LOCALE_STRINGです。これも意味

setlocale(LC_COLLATE, 'fr_FR.utf8'); // No need to set this if you're doing it elsewhere 

$collection = collect([ 
    ["name"=>"maroon"], 
    ["name"=>"zoo"], 
    ["name"=>"ábel"], 
    ["name"=>"élof"] 
])->sortBy("name", SORT_LOCALE_STRING); // Signals to arsort() to take locale into consideration 

あなたはLaravelコレクションに汎用的なPHPの配列から前後に変換する必要はありません。次のように

だから、あなたの例では、書き込むことができます。