仁和歌ブログ

情報のインプットしかしてこなかった自分が、情報のアウトプットに挑戦していくブログ。

【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']
];

PHPのarray_columnが便利 - Qiita

要するに、配列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関連の記事もちょくちょく書いていこうと思います。