18

私はHashSetsArrayListsおよびその他のJava に慣れていますCollections。しかし、私は現在PHPプロジェクトに取り組んでいます。

セットを作成し、そのセットにオブジェクト (この場合は文字列) を入力する必要がありますが、セットには各オブジェクトを 1 回しか含めることができません。さらに、特定のオブジェクトが存在する場合、最終的にこのセットから削除したいと考えています。これは、Java コレクション クラスを使用すると非常に簡単です。しかし、どうすればPHPでそれを実装できますか?

array()私が見逃している方法はありますか?PHP 5.3 を使用しています。

4

4 に答える 4

9

文字列だけの場合は、配列をセットとして使用できます。

$arr['str1'] = null;
$arr['str2'] = null;
$arr['str1'] = null;

print_r(array_keys($arr));

潜在的な問題は、可能であれば数値文字列が暗黙的に整数に変換されることだけです。しかし、ほとんどの状況では型は問題にならないため、PHP では通常は問題になりません。

于 2011-11-19T15:01:51.550 に答える
5

PHP のドキュメントには次のように書かれています。

PHP の配列は、実際には順序付きマップです。マップは、値をキーに関連付けるタイプです。このタイプは、いくつかの異なる用途に最適化されています。配列、リスト (ベクトル)、ハッシュ テーブル (マップの実装)、辞書、コレクション、スタック、キューなどとして扱うことができます。配列値は他の配列にすることができるので、ツリーや多次元配列も可能です。

通常の配列は、最適化されたインデックス構造の一種として既に実装されているため、おそらく(!) HashSetは必要ありません:)

于 2011-11-19T14:49:26.347 に答える
2

正確にはわかりませんがSplObjectStorage、あなたが望むことはできると思います:

http://php.net/manual/en/class.splobjectstorage.php

ああ、文字列はオブジェクトではありません。したがって、これを行うことができます:

$foo['bar'] = true;

配列は、文字列を一意に格納する方法として機能します。

于 2011-01-19T01:29:36.900 に答える