PHP入門 配列関数 配列の内容を順に処理する(array_walk関数)
array_walk関数を利用すれば、配列から順に要素を取得&処理できます。
構文:array_walk関数
array_walk(array &$array, callable $callback [, mixed $userdata]):bool
&$array | 処理対象の配列 |
$callback | 処理方法を表した関数 |
$userdata | 引数$callbackに渡す任意の値 |
例
foreach命令にも似ていますが、引数$userdataでコールバック関数に任意の値を渡せる点が異なります。この例であれば、引数$userdataの値(<br/>)は、コールバック関数の引数$suffix経由で引き渡されます。
<?php
$data = ['山田' => '男' , '工藤' => '女' , '田中' => '男' , '佐藤' => '女'];
array_walk($data,
function($value, $key, $suffix){
print "{$key}:{$value}{$suffix}";
},'<br/>'
);
配列の内容を変更する
コールバック関数の第1引数を参照渡しすることで、元の配列(引数&$array)の内容を書き換えることも可能です。
<?php
$data = ['山田' => '男' , '工藤' => '女' , '田中' => '男' , '佐藤' => '女'];
array_walk($data,
function(&$value){
$value = "New{$value}";
}
);
print_r($data);
入れ子の配列を再帰的に処理する
array_walk_recursive関数を利用することで、入れ子の配列を再帰的に処理することも可能です。
<?php
$sum = 0;
$count = 0;
$data = [5, 1, [10, -3]];
array_walk_recursive($data,
function($value) use(&$sum, &$count){
$sum += $value;
$count++;
}
);
$average = $sum / $count;
print "要素の個数:{$count}<br/>";
print "合計値:{$sum}<br/>";
print "平均値:{$average}<br/>";