問題タブ [spl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
136 参照

php - 日付付きオブジェクトのコレクションのデータ構造の選択

Incident_Collectionそれぞれがインターフェイスを実装する他のオブジェクトのコレクションを保持するPHP オブジェクト (と呼びます) を設計しようとしていIncidentます。

最初は、インシデント オブジェクトをIncident_Collection実装して、コレクションの配列プロパティに格納するだけでよいと考えました。IteratorAggregate

しかし、Incidentオブジェクトには自然な順序があるため、おそらくSPL データ構造の 1 つを拡張する方がより適切/効率的であると考えました。しかし、どれですか?特定のデータ構造をいつ使用するかについてはよくわかりません。

もう 1 つの問題は、Incident_Collection. たとえば、 を持つPersonオブジェクトがあった場合Incident_Collection、次の制限が適用される可能性があります。

  • 1Birth件のみ
  • 存在する場合Birthは、コレクション内の最初のインシデントである必要があります
  • 1Death件のみ
  • 存在する場合Deathは、コレクション内の最後のインシデントである必要があります
  • HS_Graduation後に来なければならないHS_Begin

Incident_Collection所有者からの一連の制限を受け入れるジェネリック(例: Person)、またはサブクラス化した方がよいでしょうPerson_Incident_Collectionか?

0 投票する
2 に答える
594 参照

php - PHP SPL-配列にキャストするときに何が起こるかを制御するためのインターフェースまたはクラスはありますか?

したがって、、、および組み込みのインターフェイスを実装するIteratorことArrayAccessで、オブジェクトがループで使用されたとき、またはプロパティが配列インデックス()であるかのようにアクセスされた場合にCountable、オブジェクト内で何が発生するかを制御できます。foreach$object['id']

たとえば、必要に応じて、データベースのフィールドを$object['version'] += 1自動的にインクリメントできるように設定できます。version

不足しているのは、にキャストするobjectことarrayです。次の場合に何が起こるかを制御できるインターフェイスまたはクラスはあります(array) $objectか?どんなにあいまいであっても、組み込みのインターフェースやクラスはありますか?例:すべてのパブリックオブジェクトプロパティをダンプする通常のオブジェクトから配列への変換の代わりに(array) $object戻りたい場合はどうなりますか?$this->propertyArray

注:配列とオブジェクトの外部の違いを可能な限り最小限に抑えることが目的であるため、メソッド名による呼び出しを要求するようなもの$object->toArray()はカウントされません。

0 投票する
1 に答える
305 参照

php - 昇順の SplPriorityQueue

以下は、SplPriorityQueue が、この場合は最新の日付に対応する最大の優先度値に最高の優先度を与えることを示しています。

優先順位として任意の日付のセットが与えられた場合、SplPriorityQueue の内容を日付の降順ではなく昇順で表示するにはどうすればよいでしょうか?

ETA: Unix のタイムスタンプを使った、ずさんな方法があります。しかし、それは Unix の時代以外では失敗します。

より堅牢な方法はありますか?

0 投票する
1 に答える
1150 参照

php - オブジェクトのコレクションを一意のセットに制限する

現在、私はと呼ばれるPHPクラスを持っていますCollection。配列を使用して、一意のオブジェクトのセットを保持します。それらは異なるメモリ アドレスを持っているという意味ではなく (明らかに違いますが)、セット内に同等のオブジェクトがないという意味で一意です。

私はSplObjectStorage、配列よりも速度が大幅に向上し、Collectionクラスよりも保守が容易である可能性があることについて読んでいます。私の問題は、SplObjectStorageそれ自体が等価性ではなく、同一性のみに関係していることです。例えば:

したがって、オブジェクトの等価性によって制限されるようにサブクラス化する方法について考えてきましたが、これまでのところ、オブジェクトを「等価署名」に設定SplObjectStorageする必要があり、見つけるまでデータ構造をループする必要があるようです一致する値。attach()$data

例えば:

より良い方法はありますか?

0 投票する
1 に答える
1539 参照

php - count()を使用してArrayAccessを実装するオブジェクトの要素をカウントしますか?

クラスがArrayAccessインターフェイスを実装すると、OffsetGet、OffsetSetなどを備えた配列として機能する準備が整います。

私が見なかったことの1つは、必要なときの実装でしたcount()sizeof()これは、PHPに関する私の限られた知識では、同じになります。

標準のPHPにすでに実装されているようなものはありますか?

0 投票する
11 に答える
34080 参照

php - PHPで配列を逆に繰り返す - SPLソリューション?

PHPにSPL逆配列イテレータはありますか? そうでない場合、それを達成するための最良の方法は何ですか?

私は単に行うことができます

また

しかし、もっとエレガントな方法はありますか?

0 投票する
1 に答える
1113 参照

php - PHPのオブジェクト反復とは

オブジェクトの反復とは何か、このコードがどのように機能するかを説明できる人はいますか?

0 投票する
1 に答える
945 参照

php - PHP 5.3でSplFileObjectをシリアライズするには?

SplFileObject をシリアル化しようとしていますが、これは 5.2 でサイレントに失敗し、5.3 で致命的なエラーをスローします。これまでのところ、SplFileObject をサブクラス化し、(簡略化された) 次のコードを使用して Serializable インターフェイスを実装することで、5.2 の問題を修正しました (完全なバージョンでは $open_mode と $context も処理されますが、その質問には関係ありません)。

しかし、5.3 ではまだ致命的なエラーがスローされます。

また、魔法__sleep__wakeupメソッドを追加しようとしましたが、役に立ちませんでした。

Google はそれについてあまり知らないようです。そのため、5.3 で SplFileObject をシリアル化することさえ可能かどうか疑問に思っています。

更新:その質問には答えがないようです(私のコメントを参照)。

0 投票する
1 に答える
1877 参照

php - RecursiveDirectoryIteratorループを使用して、現在のディレクトリ名、ファイル名、およびファイルの内容を参照するにはどうすればよいですか?

以下のスクリプトでは、$baseフォルダー内のフォルダーとファイルを反復処理しようとしています。単一レベルの子フォルダーが含まれ、それぞれに多数の.txtファイルが含まれている(サブフォルダーは含まれていない)と思います。

以下のコメントの要素を参照する方法を理解する必要があります...

どんな助けでも大歓迎です。私はこれをまとめるのに本当に近いです:-)

0 投票する
2 に答える
1575 参照

php - SPL の DirectoryTreeIterator を使用してディレクトリごとにファイルを並べ替える

SPL イテレータに関連するいくつかの質問 ( this onethis questionRecursiveIteratorIterator ) を見つけましたが、 ;のかなり高レベルの拡張機能を使用しているため、私の場合に役立つかどうかはわかりません。DirectoryTreeIterator。_

DirectoryTreeIteratorイテレータによって出力された後、返された配列をディレクトリごとに変更する方法またはソートする方法を誰かが教えてくれませんか?

.htaccessたとえば、可能であれば、Apacheサーバーでファイルを直接正しくソートする方法もオプションです。

DirectoryTreeIteratorこれはSPLのコードです。

上記のコードを使用している理由を明確にするのは、それが私のニーズにぴったり合っているからです。先頭に空白を付けた再帰的なディレクトリ ツリーを生成したい - Marcus Boerger による元のコード例では、いくつかの ASCI 要素が追加されています。問題は、ファイルとディレクトリの並べ替えを制御できないことです。そのため、ディレクトリ ツリーを次のように表示したいと考えています。

代わりに、イテレータによって返されるリストはまったくソートされず、次のように表示されます。

したがって、私が探している解決策は、サブディレクトリがインデックス化されてディレクトリ ツリーに追加されるたびに、ソート メソッドを呼び出す何らかの方法だと思います。

ネイティブではないスピーカーとして、考えを一貫した文章 (または単語でさえも) にまとめるのが難しい場合があります。