質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

11420閲覧

PHP の array_map に、2つ以上の引数を持つコールバック関数を使いたい

mugyu

総合スコア34

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2014/08/09 02:45

具体的には下記コードの例です。
引数が一つの twice($a) をコールバック関数にするときちんと動きます。
でも、引数が2つのmultiplication($a, $b) をコールバック関数にすると 引数の数が違うと怒られてしまいます。

引数が2つ以上のコールバック関数を使うスマートな解決法が何か有りますでしょうか?

`
function twice($a) {
return $a * 2;
}

function multiplication($a, $b) {
return $a * $b;
}

var_export(array_map('twice', array(1,2,3)));
// array (
// 0 => 2,
// 1 => 4,
// 2 => 6,
// )

var_export(array_map('multiplication', array(1,2,3)));
// Warning: Missing argument 2 for multiplication()
// ぐぬぬ。
// いい方法はないものか?
`


以下はベストアンサーを踏まえての追記です。

第二引数もなんとか動的に出来ないものかとコードをひねり出してみましたが、こんなん出ました。

`
$b = 3;
var_export(
array_map(function($a) use($b) {return multiplication($a, $b);}, array(1,2,3))
);

array (

0 => 3,

1 => 6,

2 => 9,

)

`

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

いくつか方法はあります。

PHP 5.3以上であれば、array_mapへの引数となる関数をその場で書くことで、数を調整できます。
array_map(function($val){return multiplication($val,2);}, array(1,2,3))

・2個めの引数も与えるために、配列を作り上げる
$arr=array(1,2,3); array_map('multiplication',$arr,array_fill(0,count($arr),2));

どうしてもarray_mapである必要がないのであれば、forやforeachで回してしまうのも一案です。

投稿2014/08/09 03:06

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mugyu

2014/08/12 15:12

ありがとうございます。やっぱり無名関数でラッピングのが一番ですかねぇ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問