array_mapの再帰処理がうまく行かない
長文で失礼します。
array_mapでの再帰処理がうまく行かないのでどこが間違っているか教えてください。
まず、このような配列があります。配列の中に配列があります。
$ary = array(1, 2, null, array("a", null, "c"));
この配列の中のnullを"なし"という文字列に変換したいです。
array_mapを使って再帰的にやってみました。
まずはうまく行ったコードから。
------------------------------------------------------
$ary = array(1, 2, null, array("a", null, "c"));
var_dump(null2Nashi($ary));
// nullを"なし"に置換する関数
function null2Nashi(
$in_array
){
if(is_array($in_array)){
return array_map("null2Nashi", $in_array);
} else {
if ($in_array === null){
$in_array = "なし";
}
return $in_array;
}
}
------------------------------------------------------
結果はnullが"なし"に変換されました
array (size=4)
0 => int 1
1 => int 2
2 => string 'なし' (length=6)
3 =>
array (size=3)
0 => string 'a' (length=1)
1 => string 'なし' (length=6)
2 => string 'c' (length=1)
そしてこの"なし"をコード内で指定するのではなく引数で指定したいと思って無名関数を使って以下のコードにしました。
------------------------------------------------------
$ary = array(1, 2, null, array("a", null, "c"));
var_dump(null2Str($ary, "なし"));
// nullを指定文字列に置換する関数
function null2Str(
$in_array, // null値を含む配列
$in_str // null値を変換したい文字列
){
$n = function($n_array) use($in_str){
if(is_array($n_array)){
return array_map($n, $n_array); //…(1)
} else {
if ($n_array === null){
$n_array = $in_str;
}
return $n_array;
}
};
return $n($in_array);
}
------------------------------------------------------
結果はnullは何も変換されませんでした。
array (size=4)
0 => int 1
1 => int 2
2 => null
3 =>
array (size=3)
0 => string 'a' (length=1)
1 => null
2 => string 'c' (length=1)
どうやら(1)のarray_mapが動作していないようです。要素を分解せずに$nの無名関数に渡さずにそのまま第2引数を返しているだけみたいです。
何か対応方法があるでしょうか?
どうぞよろしくお願い致します。