Lv1プログラマの誰得メモ

総務女子の趣味とか勉強に関係することのメモ

【PHP】array_column() の複数カラム版を作った

PHPでDBからテーブルを取得することが多く、単一カラムしか取得できないarray_column() だと機能的に足りないなかったので、配列から複数の列を取得する関数を作りました。(作りましたっていうほどのシロモノではないですが)

public function filterArrayByKeys(array $data, array $keys) {
    $result = [];

    foreach ($keys as $key) {
        $column = array_column($data, $key);

        foreach ($column as $index => $val) {
            $result[$index][$key] = $column[$index];
        }
    }

    return $result;
    }
//元の配列
$a = array( 
    array( 
        'id' => 2135, 
        'first_name' => 'John', 
        'last_name' => 'Doe', 
    ), 
    array( 
        'id' => 3245, 
        'first_name' => 'Sally', 
        'last_name' => 'Smith', 
    ) 
); 

//取得したいカラム名
$columnKeys = ['id' , 'first_name'];

$list = $this->filterArrayByKeys($a, $columnKeys);
//中身
array( 
    [0] => array( 
        [id] => 2135, 
        [first_name] => 'John'
    ), 
    [1] => array( 
        [id] => 3245, 
        [first_name] => 'Sally'
    ) 
); 

array_intersect_key() を使った記事も見つけましたが、私にはこの書き方の方が読みやすかったです。もっとスマートに書ける(読める)ようになりたいなぁ・・・