LoginSignup
27
21

More than 5 years have passed since last update.

PHP5.5.0以上対応のarray_columnと同じ機能を持つ関数を実装してみた!

Last updated at Posted at 2014-06-27

概要

PHPでは入力配列から単一のカラムの値を返す時に大変便利なarray_columnとう関数がある。

詳細はこちら:http://www.php.net/manual/ja/function.array-column.php
しかしこの関数PHP5.5.0以下では対応していないことがネック。

※PHP5.5.0以下でarray_columnを使用すると以下のエラーが出る。

PHP Fatal error:  Call to undefined function array_column() in ...

array_columnを使うがためにPHPバージョンアップするのはあまり現実的な話にならないのでPHP5.5.0以下でarray_columnとほぼ同じ機能を持つ関数を作ってみた。

ソースコード

/**
 * 指定したキーの値を取得する。2次元配列のみ対応
 * @param target_data 値を取り出したい多次元配列
 * @param column_key  値を返したいカラム
 * @param index_key   返す配列のインデックスとして使うカラム
 * return array       入力配列の単一のカラムを表す値の配列を返し
 */
function array_column ($target_data, $column_key, $index_key = null) {

    if (is_array($target_data) === FALSE || count($target_data) === 0) return FALSE;

    $result = array();
    foreach ($target_data as $array) {
        if (array_key_exists($column_key, $array) === FALSE) continue;
        if (is_null($index_key) === FALSE && array_key_exists($index_key, $array) === TRUE) {
            $result[$array[$index_key]] = $array[$column_key];
            continue;
        }
        $result[] = $array[$column_key];
    }

    if (count($result) === 0) return FALSE;
    return $result;

}

本来のarray_columnの機能と全く同じ仕様になっているか不明だが、中心的な機能(入力配列から単一のカラムの値を返す)は同じなので使用する場合は自分の好みにカスタマイズして使ってほしい。

実行結果

$user_arr = array(
    array(
        'id'         => 900001,
        'first_name' => 'honda',
        'tel'        => '000-0000-0000',
    ),
    array(
        'id'         => 900002,
        'first_name' => 'uchida',
        'tel'        => '111-1111-1111',
    ),
    array(
        'id'         => 900003,
        'first_name' => 'kagawa',
        'tel'        => '222-2222-2222',
    ),
    array(
        'id'         => 900004,
        //'first_name' => 'endo',
        'tel'        => '333-3333-3333',
    ),
);

// 返す配列のインデックス指定あり
print_r(array_column($user_arr, 'first_name', 'id'));

// 返す配列のインデックス指定なし
print_r(array_column($user_arr, 'tel'));

array_column($user_arr, 'first_name', 'id')の結果

Array
(
    [900001] => honda
    [900002] => uchida
    [900003] => kagawa
)

array_column($user_arr, 'tel')の結果

Array
(
    [0] => 000-0000-0000
    [1] => 111-1111-1111
    [2] => 222-2222-2222
    [3] => 333-3333-3333
)

引き続きPHP5.5.0以上のみで使える関数と同じ機能を持つ自作関数を作るのでフォーローお願いいたします!!

27
21
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
21