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回まで
  • 登録:
  • 終了:2012/04/13 20:21:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント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ベストアンサー獲得回数1149ここでベストアンサー

ポイント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

回答回数34ベストアンサー獲得回数4

ポイント50pt

call_user_func_arrayが簡便かと

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

id:soyuz11

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

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

2012/04/13 20:21:11

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

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

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

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

回答リクエストを送信したユーザーはいません