2011-01-24 4 views
0

私は25k以上の要素からなる配列を持っています。すべての配列値は整数です。 NOWこの配列のすべての要素に何らかの数字 "n"を掛けたいと思っています....つまり、foreachを使わずに各要素を繰り返し処理することで、どうすればいいですか?私は、パフォーマンスに影響を与える可能性があり、このような大規模な配列を通して反復bcozこのを探していますPHPで反復せずにすべての配列要素を一度に乗算する方法は?

...

ディーパック

+8

以下のようなNested functionを使用してください。 'array_map()'(以下の答えを参照)のようなものでさえも、PHPは配列を内部的に反復します。 – BoltClock

+2

それは不可能です、愚かです。 –

答えて

1
function multiplyElements($inElem){ 
    return $inElem * n; // Where "n" is the number to multiply all elements by 
} 

$yourArray = array_map('multiplyElements' , $yourArray); 
+0

任意のパフォーマンスの向上があってはならないけれども - この答えOPはそれが*暗黙のちょうど、反復して*であるJP19ものの@ :) –

+0

を尋ねポイントと回答までに、少なくともスティック。 – alex

0

がありarray_sum()ではなく、アレイ乗算器の機能。

あなたは(あなたからの反復を抽象化している、またはarray_map()を使用)反復処理する必要があります。

また、私は(あなたのプラットフォーム上でPHP_INT_MAXを確認してください)あなたの数はPHPの最大整数サイズをオーバーフローしないことを確認します。 gcmul()を使用する必要があります。

+0

ちょうど私の2セント:質問自体が少しばかげていると私は "オーバーフロー"コメントの値を追加することを理解していない - それはPHPで任意の乗算演算に当てはまり、この質問に特有のものではありません。 –

+1

@ JP19私は25kと書いてあったが、実際には大きな数になる可能性があると指摘した 'すべての配列要素を掛け合わせる方法 'と読んでいます。 – alex

+0

申し訳ありません。それから、私のコメントは本当に有効ではなく、あなたの答えは本当に便利です。私は彼が複数の25Kの数字を一緒に意味しているのか疑問に思っています。特に、彼が 'n' –

0

いいえ、削除された回答の束のため、ものでした。

  1. 何とか配列を繰り返し処理する必要があります。 array_map()(他の2つの答えを参照)のようなものを使用しても、PHPは配列全体を繰り返し処理します。

  2. 25kの反復を最適化するための最良の方法は全くそのような大きな数字を避けるにあります。 少なくともパフォーマンスは重要ではないバックグラウンドに配置します。

  3. あなたはとにかく、その時点に来た場合は、最速の方法は、テストの問題です。 aaray_mapは最悪です。

1

「パフォーマンスに影響を与える可能性がある」最適化するために、正当な理由ではありません。 がパフォーマンスに影響することを確認してください。あなたはそれが負のパフォーマンスに影響を与えることを確認している場合、これはまだあなたが反復するが、大規模なデータセットのために残して、それらのデータ構造を作ることができるのSplデータ構造の1

を使用することを検討してください実行速度とメモリ消費の両方の違い。

0

あなたは何とか配列を反復処理する必要があるとしている

function arrayFunc($e){ 
    if(is_array($e)) return array_map('arrayFunc', $e); 
    else return $e; // Set your changes here for example change this line to : else return $e * 1000; 
} 
$array = arrayFunc($array); 
関連する問題