PHPプログラムに関する各種メモ書き:タグ「ソート」での検索

phpで配列を文字数の多い順にソート(並び替え)する

phpで配列を文字数の多い順にソート(並び替え)するには以下のようにします。

● 普通の配列の場合は usort() を使用します

usort($output_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));

● 連想配列の場合は uasort() を使用します

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

No.1179
12/03 16:12

edit

配列
ソート

PHPで多次元配列(ハッシュの配列)を並び替える、またはランダム順にする。

データベースから取得したデータを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' );

簡単ですね!

No.775
07/10 17:45

edit

配列
ソート