概要
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以上のみで使える関数と同じ機能を持つ自作関数を作るのでフォーローお願いいたします!!