PHPのarray_walk_recursive()
関数は、多次元配列の全ての要素のキーと値に、ユーザー定義関数を再帰的に適用する組み込み関数。
定義
論理型 array_walk_recursive( 配列型 &$input, コールバック $funcname[, 多様な型 $userdata] );
パラメータ
- 配列型 &$input
コールバック関数を再帰的に適用したい多次元配列。
配列要素の値を、1つ目の引数として、配列要素のキーを、2つ目の引数として、コールバック関数に渡す。
- コールバック $funcname
コールバック関数。
多次元配列に再帰的に適用したいユーザー定義関数を指定する。
- 多様な型 $userdata
オプション。
コールバック関数に渡す3つ目の引数を指定できる。
戻り値
論理型。
成功すると「TRUE」、失敗すると「FALSE」を返す。
構文
多次元配列の全ての要素のキーと値に、ユーザー定義関数を再帰的に適用
論理値 = array_walk_recursive( 多次元配列, コールバック関数 );
「多次元配列」の全ての要素に、「コールバック関数」を再帰的に適用。
「多次元配列」の要素の値を、1つ目の引数、「多次元配列」の要素のキーを、2つ目の引数として、「コールバック関数」に渡す。
多次元配列の全ての要素のキーと値に、ユーザー定義関数を再帰的に適用(追加引数)
論理値 = array_walk_recursive( 多次元配列, コールバック関数, 追加引数 );
「多次元配列」の全ての要素に、「コールバック関数」を再帰的に適用。
「多次元配列」の要素の値を、1つ目の引数、「多次元配列」の要素のキーを、2つ目の引数、「追加引数」を3つ目の引数として、「コールバック関数」に渡す。
「追加引数」を、配列にすれば、複数の値を渡すこともできる。
サンプル
多次元配列の全ての要素のキーと値に、ユーザー定義関数を再帰的に適用
<?php
function printArray( $arg1, $arg2 ) {
echo "{$arg2}: {$arg1}<br />";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "printArray" );
?>
function printArray( $arg1, $arg2 ) {
echo "{$arg2}: {$arg1}<br />";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "printArray" );
?>
↓↓↓出力結果↓↓↓
red: レッド
blue: ブルー
green: グリーン
aka: 赤
ao: 青
midori: 緑
blue: ブルー
green: グリーン
aka: 赤
ao: 青
midori: 緑
多次元配列の全ての要素のキーと値に、ユーザー定義関数を再帰的に適用(追加引数)
<?php
function printArray( $arg1, $arg2, $arg3 ) {
echo "{$arg3}: {$arg2}: {$arg1}<br />";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "printArray", "色" );
?>
function printArray( $arg1, $arg2, $arg3 ) {
echo "{$arg3}: {$arg2}: {$arg1}<br />";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "printArray", "色" );
?>
↓↓↓出力結果↓↓↓
色: red: レッド
色: blue: ブルー
色: green: グリーン
色: aka: 赤
色: ao: 青
色: midori: 緑
色: blue: ブルー
色: green: グリーン
色: aka: 赤
色: ao: 青
色: midori: 緑
多次元配列の全ての要素のキーと値に、
ユーザー定義関数を再帰的に適用(複数の追加引数)
<?php
function printArray( $arg1, $arg2, $arg3 ) {
echo "{$arg3[0]}: {$arg2}: {$arg3[1]}: {$arg1}<br />";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "printArray", array( "COLOR", "色" ) );
?>
function printArray( $arg1, $arg2, $arg3 ) {
echo "{$arg3[0]}: {$arg2}: {$arg3[1]}: {$arg1}<br />";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "printArray", array( "COLOR", "色" ) );
?>
↓↓↓出力結果↓↓↓
COLOR: red: 色: レッド
COLOR: blue: 色: ブルー
COLOR: green: 色: グリーン
COLOR: aka: 色: 赤
COLOR: ao: 色: 青
COLOR: midori: 色: 緑
COLOR: blue: 色: ブルー
COLOR: green: 色: グリーン
COLOR: aka: 色: 赤
COLOR: ao: 色: 青
COLOR: midori: 色: 緑
多次元配列の全ての要素のキーと値に、ユーザー定義関数を再帰的に適用(参照渡し)
ユーザー定義関数に、配列要素の値を、参照渡しで受け渡すことにより、配列要素の値を変更することも可能。
<pre>
<?php
function editArray( &$arg1, $arg2 ) {
$arg1 = "{$arg2}は、{$arg1}。";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "editArray" );
print_r( $varArray );
?>
</pre>
<?php
function editArray( &$arg1, $arg2 ) {
$arg1 = "{$arg2}は、{$arg1}。";
}
$varArray = array(
"english" => array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
),
"kanji" => array(
"aka" => "赤",
"ao" => "青",
"midori" => "緑"
)
);
array_walk_recursive( $varArray, "editArray" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[english] => Array
(
[red] => redは、レッド。
[blue] => blueは、ブルー。
[green] => greenは、グリーン。
)
[kanji] => Array
(
[aka] => akaは、赤。
[ao] => aoは、青。
[midori] => midoriは、緑。
)
)
(
[english] => Array
(
[red] => redは、レッド。
[blue] => blueは、ブルー。
[green] => greenは、グリーン。
)
[kanji] => Array
(
[aka] => akaは、赤。
[ao] => aoは、青。
[midori] => midoriは、緑。
)
)