【PHP】 配列の全要素にユーザー関数を再帰的に適用する。

めも。

// 配列の要素を操作したい場合は$valueを参照渡ししなければならないので注意
function myCallback(&$value, $key) {
	$value .= '__';
}

$array = array('hoge', 'piyo', 'fuga', 'foo','bar','baz');
array_walk_recursive($array, 'myCallback');	
var_dump($array);

↓

array(6) {
  [0]=>
  string(6) "hoge__"
  [1]=>
  string(6) "piyo__"
  [2]=>
  string(6) "fuga__"
  [3]=>
  string(5) "foo__"
  [4]=>
  string(5) "bar__"
  [5]=>
  string(5) "baz__"
}

ちなみに上記の例ではコールバック関数をグローバルで定義したが、クラス内のfunctionを指定することも可能。
その場合array_walk_recursive()の第二引数には配列を渡す。

class hogehoge {
	
	protected function inClassCallback(&$value, $key) {
		$value .= '__inClass';
	}

	public function piyopiyo() {
		$array = array('hoge', 'piyo', 'fuga', 'foo','bar','baz');
		array_walk_recursive($array, array('self', 'inClassCallback'));	
		var_dump($array);
	}
}

↓

array(6) {
  [0]=>
  string(13) "hoge__inClass"
  [1]=>
  string(13) "piyo__inClass"
  [2]=>
  string(13) "fuga__inClass"
  [3]=>
  string(12) "foo__inClass"
  [4]=>
  string(12) "bar__inClass"
  [5]=>
  string(12) "baz__inClass"
}

自分自身のクラス内関数なので「array(‘self’, ‘functionName’)」とすればよい。
他のクラスを指定したければ「array(‘otherClassName’, ‘functionName’)」。
継承元の親クラスを指定したければ「array(‘parent’, ‘functionName’)」とかも出来たりする。