9

As a PHP programmer, I use arrays for pretty much everything. I know SPLFixedArray can be useful in certain cases, and I know PHP arrays aren't very memory efficient, but I have rarely run into actual cases where they struggle to do what I need.

This in contrast to when I'm working in Java, where I find it absolutely critical that I understand exactly what data structures I'm using, and the pros and cons of each. If someone suggested I just use a LinkedHashMap for everything in Java, they'd be laughed out of the building.

So how can we get away with such fast and loose engineering in PHP? What are the underlying specifics of PHP arrays? It's often described as "an ordered map", but that leaves a lot of the implementation left to speculation.

What are some use cases PHP arrays are particularly good at? What are some seemingly straight forward use cases that PHP arrays are actually quite bad at?

For instance, I assume there's some sort of better handling of dense integer-keyed arrays (e.g. $arr = array('a','b','c','d','e');) than an ordered hash map, but then where's the boundary between dense and sparse? Do arrays become dramatically less efficient as soon as I introduce even one non-ordered key, like $arr[10] = 'f';? What about $arr[1000000] = 'g';? I assume PHP doesn't populate the ~1 million slots inbetween, but if it's a linked list under the covers, then presumably calling $arr[rand()] = rand(); repeatedly would have to do some reordering after each insert?

Any answer that explores the underlying specifics of PHP arrays is welcome, even if it doesn't address the specific questions I raise.

4

2 に答える 2

1

PHP配列は、任意の空間座標のモデリングに優れています。正、負などのパーリンノイズ値のキャッシュを非常に簡単に作成できます。

PHP配列は、構成オブジェクトを表すのに最適です。柔軟なキータイプにより、これは簡単です。

PHP配列は、キーとインデックスの違いについて混乱させます。ひどく。

PHP配列は一般的に低速ですが、実際には配列ではなくPHP自体である可能性があり、常に実際に必要な数よりも多くのオプションを提供します。これは、次のような恐ろしい質問につながります。

PHP:2つの並列配列を反復する最良の方法は?

彼の配列を見てください。彼らは...彼らは何ですか?任意のパラメータリスト?

また、php配列が得意なもう1つのこと!

$class->call('func', Array(..params..));
于 2012-04-13T02:54:14.600 に答える
1

PHP配列の基本的な問題は、配列とマップという2つの異なるデータ型のマッシュアップであるということです。JavascriptまたはPythonの配列は、0から始まる数値でインデックス付けされた、単純な順序付きリストです。非常に理解しやすく、使用しやすいです。マップ(別名辞書)は、(通常は順序付けられていない)キーと値のペアのコレクションです。繰り返しますが、理解して使用するのは非常に簡単です。

PHP配列は両方である可能性があり、それらを使用する方法によっては両方のように動作します。PHPの配列関数を使用する特定の操作により、予期しない方法で動作する可能性があります。配列キーは(たとえば)文字列または整数にすることができますが、数値の文字列キーを使用することはできません。PHPは、何をしても強制的に整数に変換するためです。これにより、(たとえば)データをJSONとの間で変換するときに問題が発生する可能性があります。これは、異なるタイプの類似した数値キーが複数ある可能性があるためです。

PHPの開発者は、2つのデータ型を区別しておく必要がありました。配列表記を使用してオンザフライマップを作成すると便利な場合がありますが、作成するべきではありませんでした。私はPythonの大ファンではありませんが(...まだ)、リストとマップの正式な区別は、PHPよりも確かに優れていることの1つです。

于 2013-04-19T21:44:34.817 に答える