自宅にAmazonから注文していたダンボールがいくつか届いて並べていると、どうしても頭の中が配列のイメージになってきます。
プログラム教育の時に配列を箱を書いて説明するアレですね。
プログラムを上達させようとする時に、配列を極めなければいけません。
データ管理は、ライブラリやSQLなどのデータベースに任せておけばいい・・・なんていう甘っちょろい考えをしている人は、確実に上達できません。
そもそも、データベースから取得したデータの扱いこそがプログラムの真骨頂なんですからね。
そんな配列にも、多重配列、連想配列、多重連想配列、などなど、より複雑な形式になった時のソート操作を行う必要があり、"array_multisort"を使ってみて、便利に使えることが分かったので、理解した内容をブログに記載しておきます。
ただしこのやり方はPHPのみに限られてしまうので、他の言語においてはまたベット調査することにしましょう。
PHP配列のソートの基本
PHPは配列のソートを行うのにたくさんの関数が用意されています。
http://php.net/manual/ja/array.sorting.php
sort() , rsort() , asort , arsort() , ksort() , krsort() , usort() , uasort() , uksort() , natsort() , natcasesort() , array_multisort() , shuffle()
なんと13種類もあるんですね。
通常の1階層配列であれば、sort()とrsort()の2つが使えれば何の問題もないのですが、連想配列で多重配列などの場合には、これだけでは難しいですね。
もちろん、便利関数を使わずに、自分でアルゴリズムを書き込む方法もありますが、せっかくある便利関数を覚えて効率化するのも悪くはありません。
アルゴリズム構築は時間がある余暇でやることにしましょう。仕事では効率一番・・・
array_multisortの使い方
以下のような配列がある場合にいくつかのソートをしたい場合があります。
Array
(
[0] => Array
(
[name] => orange
[price] => 400
[buyDay] => 2018-11-02
)
[1] => Array
(
[name] => apple
[price] => 200
[buyDay] => 2018-11-01
)
[2] => Array
(
[name] => banana
[price] => 300
[buyDay] => 2018-11-03
)
)
家計簿のデータのサンプルですが、フルーツを購入した記録データを見立ててます。
これを表示する時に、購入日順にする場合と、料金の高い順にする場合、名前の文字列順にするパターンと、様々なソート方法が想像できます。
とりあえず、すべてやってみると以下のような感じです。
<?php
$data = array(
array(
"name" => "orange",
"price" => 400,
"buyDay" => "2018-11-02"
),
array(
"name" => "apple",
"price" => 200,
"buyDay" => "2018-11-01"
),
array(
"name" => "banana",
"price" => 300,
"buyDay" => "2018-11-03"
)
);
print_r($data);
// 名前順
$names = array();
foreach($data as $key => $value){
array_push($names , $value["name"]);
}
array_multisort($names , SORT_ASC , $data);
print_r($data);
// 値段順
$prices = array();
foreach($data as $key => $value){
array_push($prices , $value["price"]);
}
array_multisort($prices , SORT_ASC , $data);
print_r($data);
// 購入日順
$buyDay = array();
foreach($data as $key => $value){
array_push($buyDay , $value["buyDay"]);
}
array_multisort($buyDay , SORT_ASC , $data);
print_r($data);
実行結果
名前順
Array
(
[0] => Array
(
[name] => apple
[price] => 200
[buyDay] => 2018-11-01
)
[1] => Array
(
[name] => banana
[price] => 300
[buyDay] => 2018-11-03
)
[2] => Array
(
[name] => orange
[price] => 400
[buyDay] => 2018-11-02
)
)
値段順
Array
(
[0] => Array
(
[name] => apple
[price] => 200
[buyDay] => 2018-11-01
)
[1] => Array
(
[name] => banana
[price] => 300
[buyDay] => 2018-11-03
)
[2] => Array
(
[name] => orange
[price] => 400
[buyDay] => 2018-11-02
)
)
購入日順
Array
(
[0] => Array
(
[name] => apple
[price] => 200
[buyDay] => 2018-11-01
)
[1] => Array
(
[name] => orange
[price] => 400
[buyDay] => 2018-11-02
)
[2] => Array
(
[name] => banana
[price] => 300
[buyDay] => 2018-11-03
)
)
array_multisortの"SORT_ASC"の部分は、昇順ソートをする命令になっていて、"SORT_ASC"とすると降順ソートすることができます。
SQLから取得したデータを並び替えする時に非常に便利に使えそうですね。
配列操作を鍛えると、データ管理能力がどんどんアップするので、より複雑なデータ管理ができるように日々勉強しなければいけませんね。
0 件のコメント:
コメントを投稿