[PHP] 配列に関する関数メモ [5] – コールバック関数を適用する、その他

前回([PHP] 配列に関する関数メモ [4] – 配列を統合したり分解する)に引き続き、今回は配列にコールバック関数を適用するもの、その他の関数についてまとめました。

コールバック関数を適用する

その他の関数

コールバック関数を適用する

コールバック関数を適用して結果が 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) "犬" } 
} 
array_filter(配列, コールバック関数)
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) 
} 
array_map(コールバック関数, 配列)
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>
array_walk(配列, コールバック関数, 任意の値)
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" 
} 
array_diff(比較元の配列, 比較する配列)
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) 
} 
range(配列の最初の値, 配列の最後の値)
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) となる
count(配列, オブジェクトに含まれる何かの数を数える場合の指定)
PHP: range – Manual

配列の値の合計を返す – array_sum()

array_sum() 関数を使うと配列内の値の合計を整数で返すことができます。

配列 $array の中の要素の合計をだす。

$array = array( 'a' => 5, 'b' => 5, 'c' => 5 );
$value = array_sum($array);

//↓結果

int(15)
array_sum(計算したい配列)
PHP: array_sum – Manual

一応これで、配列に関する関数メモの記事は終わりです。ひとまず使いそうな関数を書いていこうと思って始めましたが、調べているうちにあれもこれもといろいろ増えてしまい、長々とした記事になってしまいました…。

PHP マニュアルのページは読みにくいなと感じていましたが、この記事を書くために何度も読んでいるうち少し頭に入ってきやすくなってきた気がします。PHP マニュアルのページも慣れればもっとスラスラ頭に入ってくるようになるかもしれないなと思いました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です