6

...連想配列よりも?

連想配列はより多くのメモリか何かを必要としますか?

$arr = array(1, 1, 1);
$arr[10] = 1;
$arr[] = 1; // <- index is 11; does the array become associative here?
4

4 に答える 4

6

つまり、PHPには非連想配列はありません。

@Sectusは、PHP配列の基礎となる実装に関する良い答えを投稿しました。「内部」で何が起こっているのかを理解することはしばしば有益です。ただし、基礎となる実装に関係なく、PHP配列は、キーに関連付けられた値の順序付きマップ(つまり、関連付けられた配列)としてPHP開発者に公開されます。いつも。

PHP:Arraysから-手動

PHPの配列は、実際には順序付けられたマップです。マップは、値をキーに関連付けるタイプです。

PHPはインデックス付き配列と連想配列を区別しないため、PHP配列には整数キーと文字列キーを同時に含めることができます。

キーは整数または文字列のいずれかです。

配列に数値のインデックスが付けられているという誤解は、キーが明示的に指定されていない場合に、便宜上、整数キーが自動インクリメントされるという機能が原因です。

ただし、すべてのキーが整数である場合でも、PHPではアイテムがたとえば$ arr [0]に存在するという保証はありません。これは、私の知る限り、インデックス付き配列を使用する他の言語で指定されてます(つまり、インデックス付き配列を想定しています)。配列には少なくとも1つの要素が含まれ、0ベースです)。

これは些細な違いではありません。潜在的な結果や違いの理解*を考えずにインデックス付き配列のように動作するPHP配列に依存するIMHOプログラマーは、奇妙な/予期しない動作に自分自身(または将来のメンテナ)を設定している可能性があります。

*配列の周りのPHP言語のインデックスのような便利さ/機能を利用するという情報に基づいた決定が利益をもたらすことができる場合があるので、私はこれを修飾しました。

于 2013-03-25T12:13:10.747 に答える
4

PHPの配列は常にハッシュテーブルです。この記事は@NikiCで読むことができます。

基本的に、PHPのすべてはハッシュテーブルです。ハッシュテーブルは、PHP配列の基盤となる実装で使用されるだけでなく、オブジェクトのプロパティとメソッド、関数、変数、およびその他のほとんどすべてを格納するためにも使用されます。

キーが0から1つずつ順番に来る場合、それはインデックス付き配列のように見えますが、実際にはそうではありません。

また、この記事は役に立ちます。

PHP配列は、配列、辞書、リンクリストであると同時に、多くの情報が必要です。

于 2013-03-25T12:14:29.880 に答える
1

すべてのPHP配列は連想的です。PHPには、他のいくつかの言語のように「リスト」がありません。数値インデックス付き配列は、数値キーを使用した連想配列にすぎません。数値キーは、アイテムを追加するときに省略できるという点でやや特殊であり、PHPがこれらのアイテムの自動インデックスを作成します。内部的に数値インデックスは、異なるインデックスタイプを使用する場合と使用しない場合がありますが(必要に応じてソースを確認してください)、同じメカニズムを使用し、パフォーマンス特性が異なる大幅に異なる配列タイプを表しません。

于 2013-03-25T12:13:44.093 に答える
0

この場合、配列は連想的になります。すべてのPHP配列は、ある種の連想配列であり、ハッシュテーブルとして実装されます。

于 2013-03-25T12:26:32.537 に答える