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/>";
実行結果
実行結果