[PHP] 配列に関する関数メモ [5] – コールバック関数を適用する、その他
前回([PHP] 配列に関する関数メモ [4] – 配列を統合したり分解する)に引き続き、今回は配列にコールバック関数を適用するもの、その他の関数についてまとめました。
コールバック関数を適用する
- 配列にコールバック関数を適用して結果が true のみの配列をつくる – array_filter()
- 配列にコールバック関数を適用し、その結果を配列にする – array_map()
- 配列のコールバック関数を適用する(キーと値を受け取れる) – array_walk()
その他の関数
- 配列と配列を比べて差を返す – array_diff()
- 指定した範囲の整数の配列を作る – range()
- 配列の要素の数を数える – count()
- 配列の値の合計を返す – array_sum()
コールバック関数を適用する
コールバック関数を適用して結果が true のみの配列をつくる – array_filter()
array_filter() を使うと配列の要素へフィルターとなるコールバック関数を適用し、返り値が true の要素のみを取り出して新たな配列を作ることができます。
配列 $array から「種類」が「犬」の値をもつ要素を取り出し、新たな配列にする。($array の配列に犬判定をする関数 fillter() を適用する)
$array = array(
array('柴犬', '種類' => '犬'),
array('メインクーン', '種類' => '猫'),
array('ベンガル', '種類' => '猫'),
array('ダックスフンド', '種類' => '犬'),
array('ペルシャ', '種類' => '猫')
);
function filter($var){
if($var['種類'] == '犬'){
return true;
}
}
$array_inu = array_filter($array, "filter");
//↓結果
$array_inu →
array(2) {
[0]=> array(2) { [0]=> string(6) "柴犬" ["種類"]=> string(3) "犬" }
[3]=> array(2) { [0]=> string(21) "ダックスフンド" ["種類"]=> string(3) "犬" }
}
PHP: array_filter – Manual
コールバック関数を適用する – array_map()
array_map() を使うと配列の要素に用意したコールバック関数を適用し、返ってきた値で新たな配列を作ることができます。
配列 $array の各要素の値の文字数を新しい配列にする。($array の配列に文字数を数える関数 str_count() を適用する)
$array = array('いぬ', 'ねこ', 'すずめ', 'かわうそ');
function str_count($var){
return mb_strlen($var);
}
$new_array = array_map("str_count", $array);
//↓結果
$new_array →
array(4) {
[0]=> int(2)
[1]=> int(2)
[2]=> int(3)
[3]=> int(4)
}
PHP: array_map – Manual
配列にコールバック関数を適用する(キーと値を受け取れる) – array_walk()
array_walk() を使うと配列の要素へコールバック関数を適用できます。
コールバック関数では、第一引数で配列の値、第二引数で配列のキー、第三引数で array_walk() の第三引数へ渡されたパラメータを受け取ることができます。
配列 $array の値とキーを使用して html を書き出す。
$array = array(
'猫' => 'メインクーン',
'犬' => 'ダックスフンド',
'イタチ' => 'かわうそ'
);
function print_html($value, $key, $userdata ){
echo '<p>'.$value.'<span class="key">'.$userdata.':'.$key.'</span></p>'.PHP_EOL;
}
array_walk( $array, 'print_html', '分類');
//↓結果
<p>メインクーン<span class="key">分類:猫</span></p>
<p>ダックスフンド<span class="key">分類:犬</span></p>
<p>かわうそ<span class="key">分類:イタチ</span></p>
PHP: array_walk – Manual
その他の関数
配列と配列を比べて差を返す – array_diff()
array_diff() を使うと配列1と配列2と比べ、配列1にはあって配列2には存在しない要素を配列として返すことができます。
配列 $array_1 にはあって $array_2 にはないものを取得しして配列にする。
$array_1 = array( 'a', 'b', 'c', 'd' );
$array_2 = array( 'e', 'f', 'a', 'b' );
$value = array_diff($array_1, $array_2);
//↓結果
array(2) {
[2]=> string(1) "c"
[3]=> string(1) "d"
}
PHP: array_diff – Manual
指定した範囲の整数の配列を作る – range()
range() 関数を使うと指定した範囲の整数で続く配列を自動的につくることができます。
10 から 15 までの整数の配列を $array を作る。
$array = range(10, 15);
//↓結果
array(6) {
[0]=> int(10)
[1]=> int(11)
[2]=> int(12)
[3]=> int(13)
[4]=> int(14)
[5]=> int(15)
}
PHP: range – Manual
配列の要素の数を数える – count()
count() 関数を使うと配列の中の要素の数を数えることができます。
第二引数へ COUNT_RECURSIVE を設定した場合は多次元配列のすべての要素数を数えることができます。
配列 $array の中の要素数を数える。
$array = array( 'a', 'b', 'c', 'd','e', 'f' ); $value = count($array); //↓結果 int(6)
多次元配列 $array の中の要素数をすべて数える。
$array = array( 'a', 'b', 'c', 'd','e', 'f', array( 'g', 'h' ) ); $value = count($array, COUNT_RECURSIVE); //↓結果 多次元配列の配列の要素も1つとして数えられる int(9) // COUNT_RECURSIVE を指定しない場合は int(7) となる
PHP: range – Manual
配列の値の合計を返す – array_sum()
array_sum() 関数を使うと配列内の値の合計を整数で返すことができます。
配列 $array の中の要素の合計をだす。
$array = array( 'a' => 5, 'b' => 5, 'c' => 5 ); $value = array_sum($array); //↓結果 int(15)
PHP: array_sum – Manual
一応これで、配列に関する関数メモの記事は終わりです。ひとまず使いそうな関数を書いていこうと思って始めましたが、調べているうちにあれもこれもといろいろ増えてしまい、長々とした記事になってしまいました…。
PHP マニュアルのページは読みにくいなと感じていましたが、この記事を書くために何度も読んでいるうち少し頭に入ってきやすくなってきた気がします。PHP マニュアルのページも慣れればもっとスラスラ頭に入ってくるようになるかもしれないなと思いました。
No Comments & Tracbacks