phpで再帰的な処理をしたい関数が複数の引数を持つ場合について教えてください。


function hoge($value){
  if(is_array($value)){
   return array_map('hoge',$value);
  }else{
   return fuga($value);
  }
}
function fuga($a){
  return $a * 2;
}

fugaの引数が1つだとarray_mapで回せますが、
fuga($a,$b)のように引数が複数の場合はどのように
書けば良いのでしょうか?

ご存知のかたご教示下さい。

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2012/04/12 23:13:21
  • 終了:2012/04/13 20:21:47

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/04/12 23:41:16

ポイント50pt

array_map は複数の配列に対応していますので、
例えば下記のような具合に利用することが出来ます。

<?php
function hoge($v1, $v2){
    if(is_array($v1) && is_array($v2)){
        return array_map('hoge', $v1, $v2);
    } else {
        return fuga($v1, $v2);
    }
}
function fuga($a, $b){
    return $a * $b;
}

$a = array( array(1,2,3,4,5), array(11,12,13,14,15), array(21,22,23,24,25) );
$b = array( array(10,20,30,40,50), array(100,200,300,400,500), array(1000,2000,3000,4000,5000) );

print_r(hoge($a, $b));

http://jp2.php.net/manual/ja/function.array-map.php

他5件のコメントを見る
id:windofjuly

>同じ分だけ生成

array($v2) じゃなくて array_fill(1,count($v1),$v2)を使うなど、
方法はいろいろありますが、そのようなことが必要な場面に遭遇したことが無いので、
「必要ならば・・・」という返事しか出来ないです

2012/04/13 20:04:07
id:soyuz11

有難うございます。
すいません長々とお付き合いいただいて!
とても参考になりました。

2012/04/13 20:17:30

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/04/12 23:41:16ここでベストアンサー

ポイント50pt

array_map は複数の配列に対応していますので、
例えば下記のような具合に利用することが出来ます。

<?php
function hoge($v1, $v2){
    if(is_array($v1) && is_array($v2)){
        return array_map('hoge', $v1, $v2);
    } else {
        return fuga($v1, $v2);
    }
}
function fuga($a, $b){
    return $a * $b;
}

$a = array( array(1,2,3,4,5), array(11,12,13,14,15), array(21,22,23,24,25) );
$b = array( array(10,20,30,40,50), array(100,200,300,400,500), array(1000,2000,3000,4000,5000) );

print_r(hoge($a, $b));

http://jp2.php.net/manual/ja/function.array-map.php

他5件のコメントを見る
id:windofjuly

>同じ分だけ生成

array($v2) じゃなくて array_fill(1,count($v1),$v2)を使うなど、
方法はいろいろありますが、そのようなことが必要な場面に遭遇したことが無いので、
「必要ならば・・・」という返事しか出来ないです

2012/04/13 20:04:07
id:soyuz11

有難うございます。
すいません長々とお付き合いいただいて!
とても参考になりました。

2012/04/13 20:17:30
id:chokobo No.2

chokobo回答回数34ベストアンサー獲得回数42012/04/13 11:34:20

ポイント50pt

call_user_func_arrayが簡便かと

http://php.net/manual/ja/function.call-user-func-array.php

id:soyuz11

これはスゴイです。
ぜひ使わせて頂きます。

いろんな関数があっても使う場面がないと
宝の持ち腐れですね。
有難うございました!

2012/04/13 20:21:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません