2012-02-14 18 views
6

私は答えが見つからないという質問があります。関数に渡すPHP配列リファレンス

私は、ファイルの進値が含まれている非常に大きな配列を構築しています(のような$array[0]=B5$array[1]=82など$array[1230009]まで)

私はその配列内のいくつかのオフセットを操作し、$arrayなどを渡す関数を作成するとき参照(function parse(&$array) { ... })それは配列normaly(function parse($array) { ... })を渡すよりも時間がかかります..

これはどのように可能ですか?

PS:アレイをまったく使用しない方法はありますか?ちょうど$ string = "B5 82 00 1E .. etc"を使用していますが、この値の一部に長さが含まれているため、16進値を読み込む際にオフセットを追跡する必要があります。

+1

を考慮すると、このような状況にあるかもしれませんパス? また、これはファイルの各バイトを参照するRAM効率的な手段ではありません。メタリンクの代わりに文字列を使用する必要があります。 – crush

+0

[PHPで(> = 5.0)、重複している可能性があります参照によってより速く渡していますか?](http://stackoverflow.com/questions/178328/in-php-5-0-is-passing-by-reference-faster) ) – PeeHaa

+0

配列を参照するために関数を実行するのに30秒かかるのと、通常の方法で配列に関数を実行するのに2秒かかる。 – pufos

答えて

3

いくつかの情報が役立ちます閉じるその記事の最後にDo not use PHP references

、ヨハネスはを(引用)コード次の一部分をポスト:次の記事で

function foo(&$data) { 
    for ($i = 0; $i < strlen($data); $i++) { 
     do_something($data{$i}); 
    } 
} 

$string = "... looooong string with lots of data ....."; 
foo(string); 

とそれに行くコメントの一部はです(まだ引用しています)

しかし、今の場合、開発者はスマートになり、 で参照を渡して時間を節約しようとしました。
でも、strlen()にはコピーが必要です。実際にstrlen()は、PHPで最も些細な機能 の一つである - -
コピー・オン・ライトがとても$datastrlen()を呼び出すためにコピーされます参照に行うことができない、strlen()は絶対に簡単な 操作を行いますとコピーはすぐに破棄されます。

あなたもそれは配列を渡すために時間がかかり、またはそれはあなたのアレイ上の機能を実行するのに長い時間がかかり、あなたが求めている質問...

+0

EDITED:今は理解している:$ string = " B5 82 00 1E ....など」?しかし、私はすべての16進値でログインを実行する必要があり、私はそれを読むことで事前にオフセットを保持する必要があります – pufos

関連する問題