での$ varで/除算配列の値を乗算しますほとんどのまともな方法は、型の配列を持つPHP
$arr = array(23,4,13,50,231,532,3);
$factor = 0.4;
は私が$factor
で割っ$arr
のすべての値が乗算され、新しい配列を/生成する必要があります。私はforeach
メソッドを知っています。ちょっと考えて、もっとエレガントなアプローチが必要です。
での$ varで/除算配列の値を乗算しますほとんどのまともな方法は、型の配列を持つPHP
$arr = array(23,4,13,50,231,532,3);
$factor = 0.4;
は私が$factor
で割っ$arr
のすべての値が乗算され、新しい配列を/生成する必要があります。私はforeach
メソッドを知っています。ちょっと考えて、もっとエレガントなアプローチが必要です。
PHP 5.3、高:
the docsとして$arr_mod = array_map(
function($val, $factor) { return $val * $factor; },
$arr,
array_fill(0, count($arr), 0.4)
);
は言う:
$arr = array(23,4,13,50,231,532,3);
$arr_mod = array_map(function($val) { return $val * 0.4; }, $arr);
が行う、動的要因に渡すパラメータの
番号にコールバック関数acceptは、
array_map()
に渡される配列の数と一致する必要があります。
この単純な例ではあまり意味がありませんが、ハードコーディングされた値を使わずに別の場所でコールバックを独自に定義することができます。
コールバックは、引数としてarray_map()
に渡す各配列から対応する値を受け取ります。したがって、$arr
のすべての値に異なる係数を適用することも考えられます。
あなたは、各配列要素に(掛け算をする)コールバック関数を適用するarray_map
機能を使用することができます。
function multiply($n) {
$factor = 0.4;
return($n * $factor);
}
$arr = array_map("multiply", $arr);
注意を真lambadasはあなたが使用できる5.3 前5.3後にあります
array_walk($arr, create_function('&$val', '$val = $val * 0.4;'));
これは、配列コピーを作成するよりも効率的です。なぜこれが選択された答えではないのだろう... –
$arr = array(23,4,13,50,231,532,3);
$factor = 0.5;
$arr_mod = array_map(
function($val) use ($factor) { return $val * $factor; },
$arr
);
'array_fill()'でうまくいっています。ありがとう – Zlatev
訂正:これは、php5以上ではなく、php5.3以上でなければなりません。匿名関数はPHP 5.3ではなく5で追加されました。 – Dmitri
@Dmitri:はい、私は自分自身に気づきました。既に修正済みです。 – Tomalak