最近Javascriptばっかりいじっていて、便利に配列操作ができる恩恵を受けまくっていました。
でも、明日PHPでとあるシステムを組み立てないといけないので、PHPでもできるだけ同じ事ができるようにしておきたかったので、
Javascriptの便利配列機能をPHPでできるようにしておきたいと思います。
データ型配列について
データベースから取得したデータは、連想配列をレコードデータとした、配列で無限に持つことができるデータ型配列です。
今回は、このデータ型配列でのいろいろな配列操作を基本として行うようにします。
サンプルデータ(Javascript)
const datas = [
{
"id" : 1,
"name" : "test",
"value" : "テスト",
"num" : 200
},
{
"id" : 2,
"name" : "hoge",
"value" : "ホゲ",
"num" : 100
},
{
"id" : 3,
"name" : "fuga",
"value" : "フガ",
"num" : 100
}
]
サンプルデータ(PHPデータ)
1,
"name" => "test",
"value" => "テスト",
"num" => 200
],
[
"id" => 2,
"name" => "hoge",
"value" => "ホゲ",
"num" => 100
],
[
"id" => 3,
"name" => "fuga",
"value" => "フガ",
"num" => 100
]
];
map : データ型の任意値をシンプル階層配列に変換する
idの一覧を配列化したり、データを一覧にする場合に使えます。
Javascript
const data = datas.map(e => e.id)
PHP
$res = array_column($datas, "id");
注意点
また、PHPのver5.5より低いバージョンで実行する場合は、array_column()が対応していないので、以前書いたブログ記事を参考にしてください。
[PHP] 連想配列内の検索
find : 任意の値を持っているデータを1つ取得する
nameの値が"test"のデータを1つだけ取得します。
Javascript
const data = datas.find(e => e.name === "test")
PHP
$res = $datas[array_search("test" , array_column($datas , "name"))];
注意点
データがヒットしない場合は、存在しない配列を指定することになるので、php.iniの設定によりエラーが出る場合があります。
正確にバリデーションを行いたい場合は、条件分岐で対応するようにしましょう。
filter : 検索条件にヒットするデータを複数取得する
numの値が100のものを取得します。
Javascript
const data = datas.filter(e => e.num === 100)
PHP
$res = array_filter($datas , function($data=[]){
return $data["num"] === 100;
});
配列の結合
結合は、いくつかのやり方があるので、それぞれ覚えておくと便利かもです。
Javascript(初級)
const array1 = ["a","b","c"]
const array2 = ["d","e","f"]
const array3 = array1.concat(array2)
> ["a","b","c","d","e","f"]
PHP(初級)
$array1 = ["a","b","c"];
$array2 = ["d","e","f"];
$array3 = array_merge($array1 , $array2);
> ["a","b","c","d","e","f"]
Javascript(中級)
const array1 = ["a","b","c"]
const array2 = ["d","e","f"]
const array3 = [...array1, ...array2]
> ["a","b","c","d","e","f"]
PHP(中級)
$array1 = ["a","b","c"];
$array2 = ["d","e","f"];
$array3 = [...$array1 , ...$array2];
> ["a","b","c","d","e","f"]
値のユニーク
一元配列の場合に手軽にユニーク処理ができます。
Javascript
const array = [1,1,2,2,3,3,4,4,5,5]
const uniq = Array.from(new Set(array))
> [1,2,3,4,5]
PHP
$array = [1,1,2,2,3,3,4,4,5,5];
$res = array_unique($array);
> ["a","b","c","d","e","f"]
ソート
ソート処理は重要です。
上記のデータでnumの低い順に並べ直してみます。
Javascript
const sort = datas.sort((a,b) => {
if(a.num < b.num){return -1}
if(a.num > b.num){return +1}
return 0
})
PHP
array_multisort(array_column($datas, "num") , SORT_ASC , $datas);
注意点
PHPのarray_multisortは、破壊的関数です。
$datasの内容をそのまま並び替えて書き換えてしまうので、元データを残したい場合は、コピーして使うなどする必要があります。
あとがき
たまにPHPを触る場合に、Javascriptで手軽に出来ることができなくて、ムキ〜!!!となる事があります。
そんな時のために、今回のような自分用スニペットブログを書いておきたかったんですよね。
これで、また、仕事の効率はかどりますわい!
0 件のコメント:
コメントを投稿