phpで配列を文字数の多い順にソート(並び替え)するには以下のようにします。
usort($output_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));
uasort($output_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));
例:
$my_array = array(
'あいうえお' ,
'12345789' ,
'長い長い文字列のテストです。' ,
);
print_r($my_array);
usort($my_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));
print_r($my_array);
結果 :
Array
(
[0] => あいうえお
[1] => 12345789
[2] => 長い長い文字列のテストです。
)
Array
(
[0] => 長い長い文字列のテストです。
[1] => 12345789
[2] => あいうえお
)
引用元 : https://goo.gl/uhhq1Z
データベースから取得したデータをPHP内で並べ替えたり、ランダムに並び替えたい時があります。 関数【array_multisort】を使ってタイトルでソートするには以下のようにすればOKです。
$loop = array(
array(
'id' => 1,
'title' => 'あいうえお',
),
array(
'id' => 2,
'title' => 'かきくけこ',
),
array(
'id' => 3,
'title' => 'さしすせそ',
),
);
$ids = array();
foreach ($loop as $value) {
array_push($ids,$value['title']);
}
// shuffle($ids); // もしランダムにソートする場合はこのコメントアウトを解除する
array_multisort($ids, SORT_DESC, $loop);
実際には次のように実装します
/**
* このメソッドはハッシュの配列を任意のカラムでソートします(大きい順 DESC )
*
* @param array $loop
* @param string $column_name
*
* @return array $loop
*/
public function loop_sort( $loop, $column_name ){
$ids = array();
foreach ($loop as $value) {
array_push($ids,$value[$column_name]);
}
array_multisort($ids, SORT_DESC, $loop); // 小さい順にする時は SORT_ASC
return $loop;
}
次のように呼び出します。(titleでソートする場合)
$sorted_loop = $this->loop_sort( $original_loop, 'title' );
簡単ですね!