【PHP】配列操作に便利な関数
久しぶりにPHPを触ることになりそうなので、のうはうを棚卸しした記事です。
array_column
の存在を知った時に書き留めておいた内容だったと思います。
主に以下の配列操作に関係する関数についての説明と使い方の例を記載しています。
array_column
array_filter
array_search
これらはPHP5.5以降なら使えるようですね。
配列の検索
DBのPK検索と同じ事ができる。
<?php function selectHogeForPK($hogePKey) { return array_filter([ 0 => [ 'hogePKey' => 2, 'sortOrder' => 2, 'createTime' => '2017-11-16 10:58:59', 'updateTime' => NULL, ], 1 => [ 'hogePKey' => 3, 'sortOrder' => 3, 'createTime' => '2017-11-16 10:58:59', 'updateTime' => NULL, ], ], function ($value, $key) use ($hogePKey) { return $hogePKey === $value['hogePKey']; }, ARRAY_FILTER_USE_BOTH); }
交差テーブルから別のPKを取得するだけなら、これでも可能。
<?php function selectHogeForPK($fooPKey) { return current(array_column( array_filter([ [ 'fooPKey' => 5, 'hogePKey' => 2, ], [ 'fooPKey' => 6, 'hogePKey' => 3, ], ], function ($value, $key) use ($fooPKey) { return $fooPKey === $value['fooPKey']; }, ARRAY_FILTER_USE_BOTH), 'hogePKey')); }
配列の便利機能 array_column
例
<?php $sumple = [ ['id'=>11,'value'=>'a'] ,['id'=>12,'value'=>'b'] ,['id'=>13,'value'=>'c'] ];
array_column
は3通りの使い方がある。
array_column(array, key)
: ある要素(フィールド)だけ取り出す
$result = [ 0=>'val' ,1=>'val',... ];
【例】
<?php $result = array_column($sumple, 'value'); $result === [ 0=>'a' ,1=>'b' ,2=>'c' ];
array_column(array, key1, key2)
: あるフィールドをキー、あるフィールドを値にした連想配列にする
[ 'val2'=>'val1' ,'val2'=>'val1',... ]
【例】
<?php $result = array_column($sumple, 'value', 'id'); $result === [ 11=>'a' ,12=>'b' ,13=>'c' ];
array_column(array, null, key)
: 行を値にした連想配列にする
[ 'val'=>['key'=>'val',...] ,'val'=>['key'=>'val',...],... ]
【例】
<?php $result = array_column($sumple, null, 'id'); $result === [ 11=>['id'=>11,'value'=>'a'] ,12=>['id'=>12,'value'=>'b'] ,13=>['id'=>13,'value'=>'c'] ];
要するに、配列in配列(2次元配列)の操作が簡単に行えるということ。
(とりあえず例。array_filter
と組み合わせて利用している)
<?php funcion test() { return current(array_column(array_filter($mstTable, function ($value, $key) use ($tableFk) { return $tableFk === $value['tableFk']; }, ARRAY_FILTER_USE_BOTH), 'mstTablePk')); }
指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す array_search
$key = array_search(val, array)
array_column
と組み合わせて利用していた箇所があった。
<?php $result = array_search(2, [ 'a'=>1 ,'b'=>2 ,'c'=>3 ,'d'=>1 ,'e'=>2 ,'f'=>3 ]); echo $result; // b
どういう時に便利だったのか思い出せない。
おわりに
そういえば、まだPHPの記事は一つも書いたことが無かったですね。
HTMLやCSSなどの記事が多かったので、フロントエンドの人と思われていた方もいるかもしれないですね(笑)
冒頭にも書いた通り、しばらくPHPを触ることになりそうなので、今後はPHP関連の記事もちょくちょく書いていこうと思います。